2013-03-30 2 views
1

У меня возникают проблемы с попыткой понять, как построить этот запрос.Выберите сгруппированные по двум столбцам с графом

Моя схема данных:

id category name  userid 
1 sports football 1 
2 cars  ferrari  1 
3 sports basketball 1 
4 film  Matrix  9 
5 film  Fauno  9 
6 sports Surf  3 

Как вы можете видеть категорию может быть повторен даже для одного и того же идентификатора пользователя, потому что имя поле отличается. Поэтому моя идея состоит в том, чтобы получить категории пользователей и количество пользователей для каждой категории в этом наборе.

Допустим, у меня есть множество пользователя set_of_user = (1,9,3), если я выполнить запрос

SELECT something FROM category_table WHERE userid IN set_of_user SOME CONDITION HERE 

Правильный результат должен быть:

category: sports 
users: 2 
category: cars 
users: 1 
category: film 
users: 1 

Мой лучший выстрел был:

SELECT userid, category, COUNT(userid) as users from interests WHERE `userid` in ' . $norm_info_ids . ' GROUP BY category 

Но это дало плохой результат, как я могу это решить?

ответ

2

Я думаю, что это то, что вы ищете с помощью COUNT с DISTINCT, наряду с GROUP BY:

select category, count(distinct userid) 
from interests 
where userid in (1,3,9) 
group by category 

SQL Fiddle Demo

Результирующее в:

CATEGORY COUNT(DISTINCT USERID) 
cars  1 
film  1 
sports  2 
1

Сначала вам нужно выбрать четкое разделение категории и идентификатора пользователя

select t.category, count(t.user_id) 
from 
(
SELECT distinct category,user_id 
from tab 
where user_id in (1,3,9) 
) t 
group by t.category 
+0

см. Http://sqlfiddle.com/#!2/c01274/14 – alwaysLearn

Смежные вопросы