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.