1
votes

Comment collecter les valeurs indésirables?

J'utilise COUNT (*) pour compter le nombre d'éléments avec des valeurs différentes dans une colonne.

J'ai utilisé cette requête:

+------------+---------+
|    Type    | COUNT(*)|
+------------+---------+
| Apples     |       30|
| Oranges    |        8|
| Others     |        8|
+------------+---------+

status est une colonne dans laquelle les valeurs sont soit 'Pommes', 'Oranges', 'Raisins', 'Bananes'

Le résultat est donc:

+------------+---------+
|    Type    | COUNT(*)|
+------------+---------+
| Apples     |       30|
| Oranges    |        8|
| Bananas    |        6|
| Grapes     |        2|
+------------+---------+

Mais je veux juste que les «pommes» et les «oranges» soient comptées. Le reste est mis sur une seule rangée. Comme ceci:

SELECT `type`, COUNT(*) FROM `fruits` GROUP BY `type`

Y a-t-il un moyen de le faire?


0 commentaires

5 Réponses :


0
votes

Utilisez casse lorsque expression

SELECT case when `type` in ('Apple','Orange') then `type` else 'Others' end as 'Type', COUNT(*)
FROM `fruits` 
GROUP BY case when `type` in ('Apple','Orange') then `type` else 'Others' end


1 commentaires

Cela fonctionne parfaitement! Merci beaucoup! Maintenant, j'ai juste besoin de comprendre comment renommer la colonne :)



0
votes

cas d'utilisation lorsque

       SELECT case when type not in('Apples','Oranges')
       then 'others'
       else type end as frt, 
       COUNT(*) FROM `fruits` 
       GROUP BY  case when type not in('Apples','Oranges') then 'others'
       else type end


0 commentaires

1
votes

Utilisez une case expression dans une table dérivée pour en regrouper d'autres. Puis agrégez son résultat:

select `type`, COUNT(*)
from
(
    SELECT case when `type` in ('Apples','Oranges') then `type`
                else 'Others'
           end as 'type'
    FROM `fruits`
) dt
GROUP BY `type`

De cette façon, vous n'aurez à écrire l'expression de cas qu'une seule fois, c'est-à-dire moins sujet aux erreurs et plus facile à maintenir.


0 commentaires

0
votes

Vous pouvez utiliser l'instruction case pour obtenir votre résultat. Et donnez un nom d'alias à votre colonne si nécessaire.

SELECT case when `type` in ('Apple','Orange') then `type` else 'Others' end as 'Type', COUNT(*) as 'COUNT(*)'
FROM `fruits` 
GROUP BY case when `type` in ('Apple','Orange') then `type` else 'Others' end


0 commentaires

0
votes

MySQL vous permet d'utiliser des alias de table dans le GROUP BY . Donc, si vous changez le nom, vous pouvez faire:

SELECT (CASE WHEN type IN ('Apples', 'Oranges')
             THEN type
             ELSE 'Others'
        END) as grp,
       COUNT(*)
FROM fruits
GROUP BY grp;

Cela peut être très pratique lorsque vous travaillez avec des expressions complexes.


0 commentaires