2
votes

nombre multiple (0 sur la table

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.


2 commentaires

Vous recherchez une clause GROUP BY . SELECT - GROUP BY- Transact-SQL


et au lieu de couleurs, je devrais pouvoir compter aussi les marques / modèles.


3 Réponses :


2
votes

Pourquoi ne pas simplement faire l'agrégation?

select colour, count(*) as no_vehicles
from vehicles v
group by colour;


0 commentaires

4
votes

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 >


1 commentaires

@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



0
votes

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.


0 commentaires