SQL, щоб знайти кількість різних значень у стовпці


342

Я можу вибрати всі різні значення у стовпці такими способами:

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

Але як я можу отримати кількість рядків із цього запиту? Чи потрібен підзапит?


1
Яку версію SQL Server ви використовуєте?
Кевін Ферчільд,

Відповіді:


614

Ви можете використовувати DISTINCTключове слово в рамках COUNTфункції сукупності:

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name

Це враховує лише окремі значення для цього стовпця.


7
Акуратний, я не знав, що ви можете помістити ключове слово.
Крістіан Оудард

13
також працює над групамиselect A,COUNT(DISTINCT B) from table group by A
tmanthey

6
чи можете ви розгорнути цей приклад, щоб розрізнити його на кілька стовпців?
Євген

Через 11 років, і це все ще корисно
wundermahn

176

Це дасть вам ВІДМОВИ чіткі значення стовпців та кількість кожного значення. Зазвичай я вважаю, що хочу знати обидві частини інформації.

SELECT [columnName], count([columnName]) AS CountOf
FROM [tableName]
GROUP BY [columnName]

60
Оскільки ви згруповані за групами columnName, ви вже отримуєте виразні значення лише один раз, і distinctключове слово тут нічого не робить. Спробуйте запит без нього, набір результатів точно такий же.
Antti29

26

Майте на увазі, що Count () ігнорує нульові значення, тому якщо вам потрібно дозволити null як своє окреме значення, ви можете зробити щось складне, наприклад:

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

Я дійсно думаю, що ваша заява мала на меті сказати:case when my_col is null then 1 else my_col end
Джеймс Дженсен

Для наочності: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
Михайло Паулуконіс

count (*) включає нулі
PragmaticProgrammer

1
@PragmaticProgrammer Я думаю, що так, але немає такого поняття, як нульовий рядок, лише нульове значення, а count(*)конкретно кількість рядків.
Девід Олдрідж

20

Сума sql унікальних значень імені стовпця та сортується за частотою:

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

1
Однозначно найкраща відповідь ІМО
Бріфорд Уайлі

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

Це дасть кількість чітких груп стовпців.


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

вам доведеться порахувати цей виразний коло, а потім дати йому псевдонім.



0

**

Використовуючи наступний SQL, ми можемо отримати чітке значення стовпця в Oracle 11g.

**

Select count(distinct(Column_Name)) from TableName

0
select count(distinct(column_name)) AS columndatacount from table_name where somecondition=true

Ви можете використовувати цей запит для підрахунку різних / чітких даних. Дякую


0

Після MS SQL Server 2012 ви також можете використовувати віконну функцію.

   SELECT column_name, 
   COUNT(column_name) OVER (Partition by column_name) 
   FROM table_name group by column_name ; 

-8

Підрахунок (виразний ({fieldname})) є зайвим

Просто Count ({fieldname}) дає всі чіткі значення в цій таблиці. Він не буде (як багато припускають) просто дасть вам кількість таблиць [тобто НЕ такий самий, як Count (*) з таблиці]


2
Ні, це не правильно. count(field)повертає кількість рядків, де fieldє not null.
Antti29
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.