SQL, aby znaleźć liczbę różnych wartości w kolumnie

342

Mogę wybrać wszystkie odrębne wartości w kolumnie na następujące sposoby:

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

Ale jak uzyskać liczbę wierszy z tego zapytania? Czy wymagane jest podzapytanie?

Christian Oudard
źródło
1
Z jakiej wersji programu SQL Server korzystasz?
Kevin Fairchild,

Odpowiedzi:

614

Możesz użyć DISTINCTsłowa kluczowego w ramach COUNTfunkcji agregującej:

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name

Będzie to zliczać tylko odrębne wartości dla tej kolumny.

Noah Goodrich
źródło
7
Zgrabne, nie wiedziałem, że można tam umieścić wyraźne słowo kluczowe.
Christian Oudard
13
działa również na grupachselect A,COUNT(DISTINCT B) from table group by A
tmanthey 18.04.13
6
czy możesz rozwinąć ten przykład, aby wyróżnić go w wielu kolumnach?
eugene
11 lat później, a to wciąż jest przydatne
wundermahn
176

To da OBIETRZE odrębne wartości kolumn i liczbę każdej wartości. Zazwyczaj uważam, że chcę poznać obie informacje.

SELECT [columnName], count([columnName]) AS CountOf
FROM [tableName]
GROUP BY [columnName]
Paul James
źródło
60
Ponieważ grupujesz według columnName, otrzymujesz już odrębne wartości tylko raz, a distinctsłowo kluczowe nic tutaj nie robi. Wypróbuj zapytanie bez niego, zestaw wyników jest dokładnie taki sam.
Antti29,
26

Pamiętaj, że Count () ignoruje wartości null, więc jeśli musisz zezwolić na wartość null jako własną odrębną wartość, możesz zrobić coś trudnego, na przykład:

select count(distinct my_col)
       + count(distinct Case when my_col is null then 1 else null end)
from my_table
/
David Aldridge
źródło
Naprawdę uważam, że twoje oświadczenie w sprawie miało na celu powiedzenie:case when my_col is null then 1 else my_col end
James Jensen,
Dla jasności: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 (*) zawiera nulls
PragmaticProgrammer
1
@PragmaticProgrammer Chyba tak, ale nie ma czegoś takiego jak pusty wiersz, tylko pusta wartość, a count(*)konkretnie liczba wierszy.
David Aldridge
20

Suma sql unikalnych wartości nazwa_kolumny i posortowana według częstotliwości:

SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name ORDER BY 2 DESC;
xchiltonx
źródło
1
Zdecydowanie najlepsza odpowiedź IMO
Briford Wylie
13
select count(*) from 
(
SELECT distinct column1,column2,column3,column4 FROM abcd
) T

To da liczbę odrębnych grup kolumn.

gipinani
źródło
11
SELECT COUNT(DISTINCT column_name) FROM table as column_name_count;

musisz policzyć tę odrębną kolumnę, a następnie nadać jej alias.

Pete Karl II
źródło
5
select Count(distinct columnName) as columnNameCount from tableName 
Wayne
źródło
0

**

Za pomocą następującego SQL możemy uzyskać odrębną liczbę wartości kolumn w Oracle 11g.

**

Select count(distinct(Column_Name)) from TableName
Nilesh Shinde
źródło
0
select count(distinct(column_name)) AS columndatacount from table_name where somecondition=true

Możesz użyć tego zapytania, aby policzyć różne / różne dane. Dzięki

Nitika Chopra
źródło
0

Po MS SQL Server 2012 możesz także użyć funkcji okna.

   SELECT column_name, 
   COUNT(column_name) OVER (Partition by column_name) 
   FROM table_name group by column_name ; 
Alper
źródło
-8

Liczba (odrębna ({nazwa pola})) jest zbędna

Wystarczy policzyć ({nazwa pola}) daje wszystkie odrębne wartości w tej tabeli. To nie będzie (jak wielu przypuszcza) po prostu da ci Count of the table [tj. NIE to samo co Count (*) z table]

Paul Pena
źródło
2
Nie, to nie jest poprawne. count(field)zwraca liczbę wierszy, w których fieldjest not null.
Antti29,