#9582 - Note : SQL faire un double count() en une requête
http://lehollandaisvolant.net/?mode=links&id=20140502143700
Vu que SQL n’est pas mon fort, je me note ça ici : comment faire deux count() en une seule requête (ça marche dans SQLite, pas testé MySQL).
J’ai une table "rss", avec des entrées. Je veux :
— compter le nombre total d’entrées pour un flux donné
— compter en même temps le nombre d’entrées non lues (données par le champ "statut"). (je veux faire un truc du genre « 10 non lus sur un total de 13 articles ».
Je fais un truc comme ça :
SELECT count(ID) AS total, SUM(CASE WHEN statut=unread THEN 1 ELSE 0 END) AS nb_unread FROM rss GROUP BY bt_feed
Ceci revient à faire un count() sur le nombre d’entrées directement, et un compteur « nb_unread » qui ajoute 1 (le SUM) dans le cas (CASE) où la ligne a un champ statut qui vaut « unread ».
Je suppose qu’on peut faire autant de « SUM(CASE…) » qu’on veut (mais ça doit impacter les perfs quand même un peu).
Je fais ça, car le « count(statut=unread) » ne marche pas, mais le SUM(CASE) revient à faire la même chose avec d’autres mots.
J’ai une table "rss", avec des entrées. Je veux :
— compter le nombre total d’entrées pour un flux donné
— compter en même temps le nombre d’entrées non lues (données par le champ "statut"). (je veux faire un truc du genre « 10 non lus sur un total de 13 articles ».
Je fais un truc comme ça :
SELECT count(ID) AS total, SUM(CASE WHEN statut=unread THEN 1 ELSE 0 END) AS nb_unread FROM rss GROUP BY bt_feed
Ceci revient à faire un count() sur le nombre d’entrées directement, et un compteur « nb_unread » qui ajoute 1 (le SUM) dans le cas (CASE) où la ligne a un champ statut qui vaut « unread ».
Je suppose qu’on peut faire autant de « SUM(CASE…) » qu’on veut (mais ça doit impacter les perfs quand même un peu).
Je fais ça, car le « count(statut=unread) » ne marche pas, mais le SUM(CASE) revient à faire la même chose avec d’autres mots.