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.