PROJET AUTOBLOG


Shaarli - le hollandais volant

Site original : Shaarli - le hollandais volant

⇐ retour index

Note : SQL faire un double count() en une requête

vendredi 2 mai 2014 à 14:37
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.