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.