Je travaille sur un projet et utilise Knex pour cela, (bien que si vous me donnez SQL cru, je suis sûr que je peux aussi convertir cela aussi.)
Alors, voici le sentiment. P>
J'ai des tables 'Groupe' et "User_group". P>
SELECT COUNT('*') AS memberCount, group.name AS name, group.id AS id FROM group INNER_JOIN user_group on group.id = user_group.group_id WHERE group.is_public = true AND WHERE user_group.role = "MEMBER" ORDER BY memberCount ASC`
Donc, une sortie ressemblerait à ceci: p> Voici ce que j'ai jusqu'à présent: p> [
{name: "Clowns", memberCount: 20, id: 3},
{name: "Puppets", memberCount: 12, id: 36},
{name: "Jugglers", memberCount: 5, id: 12},
...
]
3 Réponses :
Si vous utilisez MS-SQL, la requête ci-dessous vous aidera. Les fonctions globales sont souvent utilisées avec le groupe par clause de l'instruction SELECT.SO Vous devez utiliser le groupe par clause.
AND WHERE user_group.role = 'MEMBER' group by group.name,group.id ORDER BY COUNT(*) ASC
Le tableau par ce groupe, vous pouvez obtenir le nombre d'utilisateurs appartenant à chaque groupe. de user_group code> doit être regroupé comme ceci:
Maintenant, la requête ci-dessus doit être jointe au tableau Code> Code> Tableau: P> SELECT
COALESCE(ug.memberCount, 0) AS memberCount, g.name, g.id
FROM group AS g
LEFT JOIN (
SELECT group_id, COUNT(user_id) AS memberCount
FROM user_group
WHERE role = 'MEMBER'
GROUP BY group_id
) AS ug
ON ug.group_id = g.id
WHERE g.is_public = TRUE
ORDER BY ug.memberCount DESC, g.name
J'approcherais cela comme suit:
SELECT g.name, g.id, COUNT(ug.role) AS memberCount FROM group g LEFT JOIN user_group ug ON ug.group_id = g.id AND ug.role = 'MEMBER' WHERE g.is_public GROUP BY g.name, g.id ORDER BY memberCount DESC;
Merci. Une join interne fonctionnerait ici parce que la manière dont l'application est structurée, il n'y aurait jamais de groupe avec 0 membres. Je suis un peu confus par "groupe g" et "user_group ug" mais je suppose que c'est à quel point SQL vous permet d'utiliser des variables. Bon à savoir.
@Brianboyko. . . Celles-ci s'appellent "alias de table", pas "variables".
No
groupe par code> nécessaire?