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;
xchiltonx
источник
1
Определенно лучший ответ ИМО
Брифорд Уайли
13
select count(*) from 
(
SELECT distinct column1,column2,column3,column4 FROM abcd
) T

Это даст количество отдельных групп столбцов.

gipinani
источник
11
SELECT COUNT(DISTINCT column_name) FROM table as column_name_count;

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

Пит Карл II
источник
5
select Count(distinct columnName) as columnNameCount from tableName 
Wayne
источник
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 ; 
Alper
источник
-8

Счетчик (отличный ({fieldname})) избыточен

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

Пол Пена
источник
2
Нет, это не правильно. count(field)возвращает количество строк, где fieldесть not null.
Antti29