Подсчитать количество созданных объектов для разных пользователей

вопрос такой, как мне подсчитать количество созданных объектов (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 шт):

Автор решения: mrEvgenX

Как вариант, можно использовать конструкцию 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
→ Ссылка