2008-09-26 8 views
255

ich alle unterschiedlichen Werte in einer Spalte in den folgenden Arten wählen:SQL die Anzahl der unterschiedlichen Werte in einer Spalte finden

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

Aber wie kann ich die Zeilenanzahl von dieser Abfrage abrufen? Ist eine Unterabfrage erforderlich?

+0

Welche Version von SQL Server verwenden Sie? –

Antwort

462

Sie können das DISTINCT Schlüsselwort innerhalb der COUNT Aggregatfunktion:

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name 

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

+2

Ordentlich, ich wusste nicht, dass Sie das eindeutige Schlüsselwort dort setzen konnten. –

+10

funktioniert auch bei Gruppen 'wählen Sie A, COUNT (DISTINCT B) aus der Tabellengruppe von A' – tmanthey

+2

Können Sie dieses Beispiel auf mehrere Spalten erweitern? – eugene

6
select Count(distinct columnName) as columnNameCount from tableName 
9
SELECT COUNT(DISTINCT column_name) FROM table as column_name_count; 

du hast, dass verschiedene col zu zählen, es dann einen Alias ​​geben.

22

Beachten Sie, dass Count() ignoriert Null-Werte, also wenn Sie für null ermöglichen, müssen als ihren eigenen Wert, den Sie etwas heikel wie tun können:

select count(distinct my_col) 
     + count(distinct Case when my_col is null then 1 else null end) 
from my_table 
/
+0

Ich glaube wirklich, dass Ihre Case-Anweisung sagen sollte: 'case, wenn my_col null ist, dann 1 else my_col end' –

+0

Der Klarheit halber:' 'SELECT my_col, COUNT (my_col) + COUNT (FALL WENN my_col NULL DANN 1 ELSE NULL END) als CountOf von my_Table GROUP BY mein_col_'' –

+0

count (*) enthält Nullen – PragmaticProgrammer

9
select count(*) from 
(
SELECT distinct column1,column2,column3,column4 FROM abcd 
) T 

Diese Anzahl verschiedener geben Gruppe von Spalten.

126

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

select distinct columnName, count(columnName) as CountOf from tableName group by columnName 
+42

Da Sie nach "columnName" gruppieren, erhalten Sie die eindeutigen Werte bereits einmal und das Schlüsselwort "distinct" führt hier nichts aus. Versuchen Sie die Abfrage ohne es, das Resultset ist genau das gleiche. – Antti29

-5

Count (distinct ({} Feldname)) ist redundant

Simply Count ({} Feldname) gibt Ihnen die alle unterschiedlichen Werte in dieser Tabelle. Es wird nicht (wie viele annehmen) dir nur die Zählung der Tabelle geben [d. H. Nicht das gleiche wie Count (*) aus der Tabelle]

+2

Nein, das ist * nicht * korrekt. 'count (field)' gibt die Anzahl der Zeilen zurück, wo 'field'' not null' ist. – Antti29

8

eine SQL-Summe der Einzelwerte der column_name und durch die Frequenz sortiert:

SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name ORDER BY 2 DESC;