2017-01-31 4 views
0

Допустим, у меня есть следующий запрос:Подсчет количества различных столбцов в SQL

SELECT DISTINCT(Value1,value2,value3) From table1 

и получить что-то вроде

 # value1 value2 value3 
-------------------------------------- 
     1. result1 result1 result2 
     2. result1 result2 result2 
     3. result5 result6 result7 

Как добавить дополнительный столбец, который говорит мне, сколько раз появляется уникальная комбинация значений, таких как (последний столбец, сколько раз это происходит):

# value1 value2 value3  #occurred 
-------------------------------------- 
1. result1 result1 result2  15 
2. result1 result2 result2  25 
3. result5 result6 result7  35 
+3

использовать 'count (*)' группировку по этим 3 колонкам. –

+1

Обратите внимание, что 'distinct' не является функцией. Вместо этого 'distinct' изменяет поведение' select'. Подумайте об этом как 'select different', в отличие от' select all', а не о выборе столбцов для выбора. Вы не должны ставить вокруг него парсеры, это нестандартная вещь MySQL. – Schwern

+2

'DISTINCT' - это ключевое слово, которое применяется ко всему списку выражений, это не функция. Пары не нужны. Посторонние парны не являются недопустимыми, но нет причин их включать. В качестве заметок 'vkp' удалите ключевое слово' DISTINCT', добавьте предложение GROUP BY и добавьте агрегат 'COUNT()' в список SELECT. – spencer7593

ответ

2

Используйте group by вместо distinct. Затем вы можете использовать count.

select value1, value2, value3, count(*) as occurred 
from table1 
group by value1, value2, value3; 

Демонстрация в SQLite.

sqlite> select * from table1 order by value1, value2, value3; 
value1  value2  value3  
---------- ---------- ---------- 
1   1   2   
1   1   2   
1   2   2   
1   2   2   
1   2   2   
5   6   7   

sqlite> select value1, value2, value3, count(*) as '#occurred' from table1 group by value1, value2, value3; 
value1  value2  value3  #occurred 
---------- ---------- ---------- ---------- 
1   1   2   2   
1   2   2   3   
5   6   7   1   
3
SELECT Value1,value2,value3,count(*) 
From  table1 
group by Value1,value2,value3 
Смежные вопросы