2017-08-18 1 views
1

Angenommen, ich habe eine Spalte mit drei Arten von Daten wie A, B, C. Ich möchte die Nummer jedes Typs gruppieren und zählen. Zum Beispiel, wenn A 3 mal in der Spalte ist, B ist 2 mal und C ist 1 mal. Es sollte angezeigt werden als:Wie gruppiere und zeige ich die Anzahl der Daten an?

A B  C 
3 2  1 

ich Ihre Hilfe schätzen würde. Vielen Dank.

Antwort

1

Wenn Sie die Daten in einer Reihe möchten, können Sie bedingte Aggregation verwenden:

select sum(col = 'a') as A, sum(col = 'b') as b, sum(col = 'c') as c 
from t; 

Sie können versuchen, die explizite:

select sum(case when col = 'a' then 1 else 0 end) as A, 
     sum(case when col = 'b' then 1 else 0 end) as b, 
     sum(case when col = 'c' then 1 else 0 end) as c 
from t; 
+0

Das funktioniert, aber die Ausgabe wird negativ angezeigt? –

+0

@NIKHILLAHOTY. . . Dies sollte keine negativen Werte ergeben. –

+0

Ja, aber es geht mir gut. Irgendwelche Gedanken? –

0

würde ich die folgende Abfrage tatsächlich vorschlagen:

SELECT 
    data, COUNT(*) AS cnt 
FROM yourTable 
GROUP BY data 

Dies würde erzeugen Zählungen in Reihenform, z.B.

A 3 
B 2 
C 1 

Die meiste Zeit würde dies Ihren Bedürfnissen entsprechen. Wenn Sie stattdessen wirklich Spalten benötigen, können Sie diese versuchen:

SELECT 
    SUM(CASE WHEN data = 'A' THEN 1 ELSE 0 END) AS A, 
    SUM(CASE WHEN data = 'B' THEN 1 ELSE 0 END) AS B, 
    SUM(CASE WHEN data = 'C' THEN 1 ELSE 0 END) AS C 
FROM yourTable 

Dies würde Ihre wörtliche erwartete Ausgabe erzeugen:

A B C 
3 2 1 
+0

Es hat funktioniert, Danke. –

Verwandte Themen