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?


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.


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]

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
/

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;

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.


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

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


5
select Count(distinct columnName) as columnNameCount from tableName 

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

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


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 ; 

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


2
Nie, to nie jest poprawne. count(field)zwraca liczbę wierszy, w których fieldjest not null.
Antti29,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.