2015-04-20 2 views
1

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

USER_ID DATA 
123  abc 
234  abc 
123  def 
456  def 
123  abc 

Я хочу следующие результаты:

USER_ID COUNT 
123  2 
234  1 
456  1 

Поскольку «123» имеет как «ABC» и «DEF» значения данных, где, как «234» и «456» имеет только одно значение данных.

В настоящее время у меня есть следующий псевдокод:

rows = SELECT DISTINCT user_id FROM table 
for for in rows: 
    result = SELECT DISTINCT user_id, data FROM table WHERE user_id = <row> 
    if result.rowcount > 2: 
      doSomething() 

Но это занимает много времени, поскольку он должен сделать вызов для каждого user_id.

Можно ли это сделать в одной команде MySQL?

ответ

3

Просто используйте COUNT() агрегацию наряду с GROUP BY

SELECT 
    user_id, 
    COUNT(DISTINCT data) AS distinct_data_count 
FROM table 
GROUP BY user_id 
+0

Отлично, спасибо Майк. – DJDMorrison

0

Я немного ржавый, но вы не можете сделать

SELECT DISTINCT user_id, COUNT(DISTINCT data) as dc from table; 
Смежные вопросы