Bonjour,
Je cherche à faire 2 comptages sur les données d'une table avec un groupage sur un champ.
Voici un exemple de données :
Je cherche à faire ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 sends_id | status | result ----------+--------+---------- 119 | er | 7dccs11x 119 | er | 120 | po | 5bde48u1 120 | pu | 121 | po | a1d9tbg8
- compter le nombre de ligne avec sends_id identique -> n_total
- compter le nombre de ligne dont status = "po" et result = valeur non vide
Ce qui devrait me donner ceci :
J'ai écris ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 sends_id | n_total | n_ok --------------------+------ 119 | 2 | 0 120 | 2 | 1 121 | 1 | 1
Résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 WITH a AS ( SELECT sends_id, COUNT(sends_id) AS n_total, CASE WHEN status = 'po' THEN 1 ELSE 0 END AS po FROM resource GROUP BY sends_id, status ) SELECT sends_id, sum(po) AS n_ok, n_total FROM a GROUP BY sends_id, n_total;
Ce qui ne passe pas c'est que les lignes avec 121 on 2 statuts différents.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 sends_id | n_total | n_ok --------------------+------ 119 | 2 | 0 120 | 1 | 1 121 | 1 | 1
Je ne vois pas trop comment prendre en compte ceci...
Une idée ?
Merci
Partager