-1
votes

Quelle est la meilleure façon de compter le nombre de références basées sur des conditions dans les tables "maison" et "loin"?

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`
  • où is_public est vrai li>
  • retourner le groupe.name et group.id li>
  • et un nombre de membres du groupe. LI>
  • triés de la plupart des membres au moins li> ul>

    Donc, une sortie ressemblerait à ceci: p> xxx pré>

    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},
      ...
    ]
    


1 commentaires

No groupe par nécessaire?


3 Réponses :


0
votes

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


0 commentaires

0
votes

Le tableau user_group code> doit être regroupé comme ceci: xxx pré>

par ce groupe, vous pouvez obtenir le nombre d'utilisateurs appartenant à chaque groupe. de
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


0 commentaires

1
votes

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;


2 commentaires

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".