Bonjour,
J'aimerais bien savoir si il y a une autre manière d'écrire la requête suivante :
sans utiliser le CASE WHENCode:
1
2 SELECT count(CASE WHEN label='test' THEN 1 END) as nb_test from sil_test
Merci
Version imprimable
Bonjour,
J'aimerais bien savoir si il y a une autre manière d'écrire la requête suivante :
sans utiliser le CASE WHENCode:
1
2 SELECT count(CASE WHEN label='test' THEN 1 END) as nb_test from sil_test
Merci
Salut,
Au lieu d'utiliser le CASE WHEN tu mets ta condition dans le Where :
Tout simplement! :)Code:Where label = "test"
dans ma requete je fais déjà un select de label apres un autre select du count de label ou le non du label est egal à test donc ça marche pas
Code:
1
2 SELECT label , count(CASE WHEN label='test' THEN 1 END) AS nb_test FROM sil_test
Bonjour,
Quel SGBD ?
Quel est le problème avec CASE() ?
Tatayo.
MYSQL, je veux l'écrire d'une autre façon sans utiliser CASE WHERE, est ce que c'est possible?
Code:SELECT label , count(label) AS nb_test FROM sil_test WHERE label = 'test' GROUP BY label;
Je n'ai pas du tout les mêmes résultats avec les deux requêtes :
et:Code:
1
2
3
4
5
6
7
8
9 SELECT label ,date,count(id) as nb, count(CASE WHEN label='test' THEN 1 END) as nb_test from sil_test,sil_data where sil_data.id_t=sil_data.id_t GROUP by label, date
Code:
1
2
3
4
5
6
7
8
9
10 SELECT label ,date,count(id) as nb, count(label) as nb_test from sil_test,sil_data where label= "test" and sil_data.id_t=sil_data.id_t GROUP by label, date
MaxDB propose la fonction Decode(), qui peut être utilisée ici:
Si la colonne label vaut 'test', decode() renvoie 1 sinon 0.Code:
1
2
3 select decode(label,'test',1,0) as xx from LaTable
Je ne sais pas ce que propose la norme SQL, ni MySQL (qui se moque un peu de la norme SQL...).
Tatayo.
J'ai essayé est l'ai l'erreur :
Citation:
Incorrect parameter count in the call to native function 'decode'
Saluton,
Il me semble que c'est ce que fait la fonction MySQL IF(), qui n'est qu'un ersatz de (CASE WHEN THEN ELSE END.)Code:
1
2 SELECT SUM(IF(label='test', 1,0)) AS nb_test FROM sil_test
Bonjour,
Oui c'est possible (Après tout, même quand on a un marteau à portée de main, rien n’empêche d'enfoncer un clou avec une pierre...) :
Ce sera certainement moins performant...Code:
1
2
3
4
5 SELECT label , (SELECT count(*) FROM sil_test WHERE label='test' ) AS nb_test FROM sil_test
Je me pose la même question que tatayo :
Citation:
Quel est le problème avec CASE
merci je vais voir ce que ça donne
Vous n'avez toujours pas répondu à la question !
Car si le seul but est de trouver des syntaxes tordues, on doit pouvoir faire mieux :
Code:
1
2
3
4
5
6 SELECT label , COUNT(*) - COUNT(NULLIF(COALESCE(label,''),'test')) AS nb_test FROM sil_test GROUP BY label
surtout que... je ne vois pas non plus l’intérêt de votre COUNT si vous faites un test qui porte sur le critère de regroupement...
Que cherchez-vous à obtenir comme résultat ?
:koi::koi: