Подсчитать количество созданных объектов для разных пользователей
вопрос такой, как мне подсчитать количество созданных объектов (obj_type) для каждого пользователя (user), где event_type = 1?
Имеется таблица такого вида:
| event_type | user | obj_type | obj_id |
|---|---|---|---|
| 1 | Василий Васильев | 2 | 2000 |
| 1 | Василий Васильев | 4 | 4000 |
| 1 | Василий Васильев | 4 | 4001 |
| 1 | Василий Васильев | 1 | 1000 |
| 1 | Василий Васильев | 3 | 3000 |
| 2 | Василий Васильев | 3 | 3000 |
| 1 | Петр Петров | 2 | 2001 |
| 1 | Петр Петров | 2 | 2002 |
После запроса должна отобразиться информация такого вида:
| user | Count obj_type 1 | Count obj_type 2 | Count obj_type 3 | Count obj_type 4 |
|---|---|---|---|---|
| Василий Васильев | 1 | 1 | 2 | 2 |
| Петр Петров | 0 | 2 | 0 | 0 |
Я пытался сделать так
select user, count(distinct obj_id) as count1 from logObj where event_type = 1 group by user;
но такой запрос не посчитает количество для отдельных типов. Была еще такая попытка
select l.user, (select count(*) from logObj where obj_type=1 and event_type=1) as count1 from logObj l Group by l.user;
но так он считает не смотря на пользователя.
Буду благодарен любой подсказке для решения задачи! Заранее благодарю
Ответы (1 шт):
Как вариант, можно использовать конструкцию CASE WHEN ... THEN ... END внутри COUNT, чтобы посчитать объекты конкретного типа.
При этом может получиться что-то такое http://sqlfiddle.com/#!9/d2e589/2:
SELECT
user,
count(case when obj_type=1 then 1 end) as "Count obj_type 1",
count(case when obj_type=2 then 1 end) as "Count obj_type 2",
count(case when obj_type=3 then 1 end) as "Count obj_type 3",
count(case when obj_type=4 then 1 end) as "Count obj_type 4"
FROM logObj
WHERE event_type = 1
GROUP BY user