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?
5 Réponses :
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
Cela fonctionne parfaitement! Merci beaucoup! Maintenant, j'ai juste besoin de comprendre comment renommer la colonne :)
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
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.
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
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.