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 () игнорирует нулевые значения, поэтому, если вам нужно разрешить нулевое значение как отдельное отдельное значение, вы можете сделать что-то хитрое, например:

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 уникальных значений column_name и отсортированная по частоте:

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;

Вы должны посчитать этот отдельный col, а затем дать ему псевдоним.



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}) дает вам все значения в этой таблице. Он не будет (как полагают многие) просто даст вам счет таблицы [то есть, НЕ такой же, как счетчик (*) из таблицы]


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