8 Stimmen

Wie man mehrere Werte in einer Spalte mit SELECT COUNT zählt

Eher ein Anfänger in SQL, also bitte sei vorsichtig.... da ich denke, dass dies eine grundlegende Frage ist.

Ich versuche eine Abfrage mit mehreren (13) Zählungen zu schreiben, basierend auf Spalte1. Die erste Zählung ist die Gesamtanzahl. Und dann sind die nächsten 12 nach Farbe gefiltert. Ich kann meine Ergebnisse erhalten, indem ich mehrere Zählungen alle in einer Abfrage durchführe, aber das gibt mir 13 Datensätze. Das Ziel hier ist alles in nur einer Zeile zu bekommen. Also, fast wie jede Zählung seine eigene Spalte wäre. Hier ein Beispiel des Datenmodells

Datenbank = CARS, Tabelle = TYPES, Spalte1 = LICENSE, Spalte2 = COLOR

SELECT COUNT (LICENSE) AS 'Gesamtanzahl ALLER Autos'
FROM CARS.TYPES WITH (NOLOCK)

SELECT COUNT (LICENSE) AS 'Gesamtanzahl Roter Autos'
FROM CARS.TYPES WITH (NOLOCK)
WHERE COLOR = 'ROT'

Und so weiter für jede verbleibende Farbe. Das funktioniert, aber nochmal, ich versuche alles in nur einer Zeile der Daten zu vereinen, falls möglich. Vielen Dank im Voraus

18voto

Sie müssen einfach die Farbe im SELECT-Statement angeben und nach ihr gruppieren, um die Anzahl der Autos jeder Farbe zu zählen.

 SELECT Farbe, Count(*)
 FROM CARS.TYPES WITH(NOLOCK)
 GROUP BY Farbe

oder

SELECT COUNT(CASE WHEN Farbe = 'ROT' THEN 1
                  ELSE NULL
             END) AS RoteAutos
       ,COUNT(CASE WHEN Farbe = 'BLAU' THEN 1
                   ELSE NULL
              END) AS BlaueAutos
       ,COUNT(*) AS AlleAutos
    FROM CARS.TYPES WITH ( NOLOCK )

12voto

Hart CO Punkte 34004

Sie können dies mit einem bedingten SUM() tun:

SELECT SUM(CASE WHEN Color = 'Rot' THEN 1 END) AS 'Insgesamt Rote Autos'
      ,SUM(CASE WHEN Color = 'Blau' THEN 1 END) AS 'Insgesamt Blaue Autos'
FROM CARS.TYPES

Wenn Sie MySQL verwenden, können Sie dies weiter vereinfachen:

SELECT SUM(Color = 'Rot') AS 'Insgesamt Rote Autos'
      ,SUM(Color = 'Blau') AS 'Insgesamt Blaue Autos'
FROM CARS.TYPES

4voto

Martin Smith Punkte 417623

Oder mit PIVOT

SELECT ROT + BLAU + GRÜN AS gesamt,
       ROT,
       BLAU,
       GRÜN
FROM   AUTOS.TYPEN PIVOT (COUNT (LIZENZ) FÜR FARBE IN ([ROT], [BLAU], [GRÜN])) P

0voto

Dipendu Paul Punkte 2453
 WÄHLE SUM(Al) AS AllCount, SUM(Red) AS RedCount, SUM(Green) AS GreenCount, ...
 (  
   WÄHLE 1 AS Al 
   , FALLS Color = 'Red' DANN 1 SONST 0 END AS Red 
   , FALLS Color = 'Green' DANN 1 SONST 0 END AS Green
   ... 
   FROM CARS.Types
 )

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X