SQL, um die Anzahl der unterschiedlichen Werte in einer Spalte zu ermitteln

340

Ich kann alle unterschiedlichen Werte in einer Spalte auf folgende Weise auswählen:

  • SELECT DISTINCT column_name FROM table_name;
  • SELECT column_name FROM table_name GROUP BY column_name;

Aber wie erhalte ich die Zeilenanzahl aus dieser Abfrage? Ist eine Unterabfrage erforderlich?

Christian Oudard
quelle
1
Welche Version von SQL Server verwenden Sie?
Kevin Fairchild

Antworten:

613

Sie können das DISTINCTSchlüsselwort innerhalb der COUNTAggregatfunktion verwenden:

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name

Dies zählt nur die unterschiedlichen Werte für diese Spalte.

Noah Goodrich
quelle
7
Ordentlich, ich wusste nicht, dass Sie das eindeutige Schlüsselwort dort einfügen können.
Christian Oudard
13
arbeitet auch auf Gruppenselect A,COUNT(DISTINCT B) from table group by A
Tmanthey
6
Können Sie dieses Beispiel auf mehrere Spalten erweitern?
Eugene
11 Jahre später, und das ist immer noch nützlich
Wundermahn
175

Dies gibt Ihnen BEIDE die unterschiedlichen Spaltenwerte und die Anzahl der einzelnen Werte. Normalerweise finde ich, dass ich beide Informationen wissen möchte.

SELECT [columnName], count([columnName]) AS CountOf
FROM [tableName]
GROUP BY [columnName]
Paul James
quelle
60
Da Sie nach gruppieren columnName, erhalten Sie die eindeutigen Werte bereits einmal und das distinctSchlüsselwort bewirkt hier nichts. Versuchen Sie die Abfrage ohne, die Ergebnismenge ist genau die gleiche.
Antti29
26

Beachten Sie, dass Count () Nullwerte ignoriert. Wenn Sie also Null als eigenen Wert zulassen müssen, können Sie Folgendes tun:

select count(distinct my_col)
       + count(distinct Case when my_col is null then 1 else null end)
from my_table
/
David Aldridge
quelle
Ich denke wirklich, Ihre Fallaussage sollte sagen:case when my_col is null then 1 else my_col end
James Jensen
Zur Klarheit:SELECT my_col, COUNT(my_col) + COUNT(CASE WHEN my_col IS NULL THEN 1 ELSE NULL END) as CountOf from my_Table GROUP BY my_col
Michael Paulukonis
count (*) enthält nulls
PragmaticProgrammer
1
@PragmaticProgrammer Ich denke schon, aber es gibt keine Nullzeile, nur einen Nullwert und count(*)speziell eine Anzahl von Zeilen.
David Aldridge
20

Eine SQL-Summe der eindeutigen Werte von column_name, sortiert nach der Häufigkeit:

SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name ORDER BY 2 DESC;
xchiltonx
quelle
1
Auf jeden Fall die beste Antwort IMO
Briford Wylie
13
select count(*) from 
(
SELECT distinct column1,column2,column3,column4 FROM abcd
) T

Dies gibt die Anzahl der verschiedenen Gruppen von Spalten an.

gipinani
quelle
11
SELECT COUNT(DISTINCT column_name) FROM table as column_name_count;

Sie müssen diese eindeutige Spalte zählen und ihr dann einen Alias ​​geben.

Pete Karl II
quelle
5
select Count(distinct columnName) as columnNameCount from tableName 
Wayne
quelle
0

** **.

Mit folgendem SQL können wir die eindeutige Anzahl der Spaltenwerte in Oracle 11g ermitteln.

** **.

Select count(distinct(Column_Name)) from TableName
Nilesh Shinde
quelle
0
select count(distinct(column_name)) AS columndatacount from table_name where somecondition=true

Mit dieser Abfrage können Sie verschiedene / unterschiedliche Daten zählen. Vielen Dank

Nitika Chopra
quelle
0

Nach MS SQL Server 2012 können Sie auch die Fensterfunktion verwenden.

   SELECT column_name, 
   COUNT(column_name) OVER (Partition by column_name) 
   FROM table_name group by column_name ; 
Alper
quelle
-8

Count (different ({Feldname})) ist redundant

Einfach zählen ({Feldname}) gibt Ihnen alle unterschiedlichen Werte in dieser Tabelle. Es wird nicht (wie viele vermuten) nur die Anzahl der Tabellen angeben [dh NICHT die gleiche wie Anzahl (*) aus der Tabelle]

Paul Pena
quelle
2
Nein, das ist nicht richtig. count(field)Gibt die Anzahl der Zeilen zurück, in denen sich fieldbefindet not null.
Antti29