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?


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.


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]

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
/

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;

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.


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.


5
select Count(distinct columnName) as columnNameCount from tableName 

0

** **.

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

** **.

Select count(distinct(Column_Name)) from TableName

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


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 ; 

-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]


2
Nein, das ist nicht richtig. count(field)Gibt die Anzahl der Zeilen zurück, in denen sich fieldbefindet not null.
Antti29
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.