Mam zestaw kwerendy modelu auth.User.Adnotacje Django ORM: najczęstsza grupa zapytań użytkowników
Chcę wiedzieć: które grupy zawierają najwięcej tych użytkowników.
Przykład: trzy grupy, z tych użytkowników:
- G1: u1 u2 u3 u4
- G2: u1 u2
- G3 U1 U4 U5 U6
- G4: U5 U6 u7
użytkownika QuerySet: u1 u2 u3
Wynik (liczenie członków, które są w danym User-queryset):
- g1 count 3
- g2: Ilość 2
- G3: 1 Liczba
- G4 count 0
Jak Czy mogę uzyskać anonimowy QuerySet z modelu Group to z Django 1.8?
Use Case
Pokaż jak wielu członków "X" w nazwie użytkownika Każda grupa ma.
SQL
SELECT auth_group.id, auth_group.name,
(SELECT COUNT(auth_user_groups.id) FROM auth_user_groups WHERE
auth_user_groups.group_id = auth_group.id AND
auth_user_groups.user_id IN (SELECT auth_user.id FROM auth_user WHERE username LIKE '%x%')) AS user_cnt
FROM auth_group ORDER BY user_cnt DESC;
Aktualizacja
Grupa g4
ma członków dopasowania, ale powinna być w queryset adnotacjami.
Dobrze, twoja odpowiedź działa. Wynikowy SQL: "SELECT" auth_group "." Id "," auth_group "." Name ", COUNT (CASE WHEN" auth_user_groups "." User_id "IN (SELECT U0." Id "FROM" auth_user "U0 WHERE U0." username ":: text LIKE testfoobar%) THEN 1 ELSE NULL END) AS" user_cnt "OD" auth_group "LEFT OUTER DOŁĄCZ" auth_user_groups "ON (" auth_group "." id "=" auth_user_groups "." group_id ") GROUP BY" auth_group "."id", "auth_group". "name" ORDER BY "user_cnt" DESC' – guettli