J'ai une base de données de véhicules et je veux compter combien de voitures ont une couleur spécifique.
Mais je ne sais pas quelles couleurs il y a car il y en a beaucoup, aussi des combinaisons. Donc ce code ne fait pas l'affaire pour moi:
select distinct colour from vehicles
Pour obtenir toutes les couleurs, je pourrais faire:
SELECT
SUM(CASE WHEN colour='red' THEN 1 ELSE 0 END) red,
SUM(CASE WHEN colour='green' THEN 1 ELSE 0 END) green
(etc)
FROM vehicles
Mais comment puis-je utiliser ces informations dans une instruction SQL comme celle ci-dessus? J'utilise le serveur MS SQL.
3 Réponses :
Pourquoi ne pas simplement faire l'agrégation?
select colour, count(*) as no_vehicles from vehicles v group by colour;
Vous pouvez placer le jeu de résultats dans des lignes plutôt que dans des colonnes:
SELECT colour, count(*) FROM vehicles GROUP BY colour;
L'alternative est que vous deviez utiliser du SQL dynamique ou exprimer le jeu de résultats au format XML ou JSON. p >
@Larnu Après avoir lu la page de group-by, je suis arrivé exactement à la même solution. Précisément ce dont j'avais besoin! Je n'ai jamais bien compris GROUP-BY, alors merci pour cela
Cela affichera une liste de toutes les couleurs trouvées dans les véhicules de table:
SELECT colours ,count(*) HowMany from vehicles group by colours
Mais ce que vous voulez vraiment utiliser, c'est clause group by , comme ceci:
SELECT distinct colour from vehicles
Cela produira une ligne pour chaque valeur distincte dans Colonne couleurs . Il n'analysera PAS les combinaisons de couleurs; "rouge avec bordure noire" sera sa propre colonne, et non +1 pour le rouge, _1 pour le noir - ce serait un problème beaucoup plus complexe.
Vous recherchez une clause
GROUP BY. SELECT - GROUP BY- Transact-SQLet au lieu de couleurs, je devrais pouvoir compter aussi les marques / modèles.