Compter le nombre d'enregistrements avec des valeurs correspondantes dans les champs séparés
J'ai une table (matable) comme suit:
id | name | orig_id
----+-------+--------
01 | Bill | -
02 | Tom | 01
03 | Sam | 01
04 | Alex | 02
05 | Phil | -
06 | Bob | 01
J'aimerais une requête qui retourne chaque enregistrement, mais avec un ajout de la colonne contenant le nombre de lignes qui ont un orig_id égal à la ligne actuelle de l'id.
La table résultante devrait ressembler à ceci:
id | name | orig_id | mycount
----+-------+---------+--------
01 | Bill | - | 3
02 | Tom | 01 | 1
03 | Sam | 01 | 0
04 | Alex | 02 | 0
05 | Phil | - | 0
06 | Bob | 01 | 0
J'ai essayé la requête suivante, mais n'obtenez pas de résultats:
SELECT *, COUNT(t.name) AS mycount
FROM "myTable" AS t
WHERE t.id=t.orig_id
GROUP BY t.id;
Comment puis-je obtenir les résultats souhaités?
Pourquoi Sam n'ont count 0 quand Tom a 1, mais tous les deux ont origid 01? Ne devrait pas Sam ont également compter 1
Sam a un 0 comptent, car aucun autre enregistrement a une orig_id qui est égal à son id (03). Tom a un nombre de 1 à cause d'Alex orig_id est égale à celle de Tom id.
Sam a un 0 comptent, car aucun autre enregistrement a une orig_id qui est égal à son id (03). Tom a un nombre de 1 à cause d'Alex orig_id est égale à celle de Tom id.
OriginalL'auteur Rob Shell | 2013-06-26
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire avec une jointure et d'agrégation:
OriginalL'auteur Gordon Linoff
Un simple
left join
avec le comte va le faire:Voir un démonstration en direct sur SQLFiddle qui produit ce résultat:
OriginalL'auteur Bohemian