2013-02-12 3 views
0

У меня есть запрос COUNT + GROUP BY для postgresql.Включить кол-во 0 в мою группу по запросу

SELECT date_trunc('day', created_at) AS "Day" , 
     count(*) AS "No. of actions" 
FROM events 
WHERE created_at > now() - interval '2 weeks' 
    AND "events"."application_id" = 7 
    AND ("what" LIKE 'ACTION%') 
GROUP BY 1 
ORDER BY 1 

Мой запрос подсчитывает количество «ACTION *» в день на моем столе событий (журнал таблица) в 2weeks для моего приложения с идентификатором 7. Но проблема это не показывает, когда есть день без каких-либо действий.

Я знаю, что это из-за моего предложения WHERE, поэтому я попробовал некоторые вещи с запросами JOIN, но ничего не дал мне хорошего ответа.

Спасибо за вашу помощь

ответ

0

Ok друг помог мне, вот ответ:

SELECT "myDates"."DateValue" AS "Day" , 
    (select count(*) from events WHERE date_trunc('day', "events"."created_at") = "myDates"."DateValue" AND 
    ("events"."application_id" = 4) AND 
    ("events"."what" LIKE 'ACTION%')) AS "No. of actions"  
FROM "myDates" 
where ("myDates"."DateValue" > now() - interval '2 weeks') AND ("myDates"."DateValue" < now()) 

Таким образом, мы должны спросить все введите дату из таблицы MyDates и задайте счет во втором аргументе.

2

Сделать дату таблицы:

CREATE TABLE "myDates" (
    "DateValue" date NOT NULL 
); 

INSERT INTO "myDates" ("DateValue") 
select to_date('20000101', 'YYYYMMDD') + s.a as dates from generate_series(0,36524,1) as s(a); 

Тогда левый присоединиться на него:

SELECT d.DateValue AS "Day" , 
     count(*) AS "No. of actions"  
FROM myDates d left join events e on date_trunc('day', "events"."created_at") = d.DateValue 
WHERE created_at > now() - interval '2 weeks' AND 
     "events"."application_id" = 7 AND 
     ("what" LIKE 'ACTION%') 
GROUP BY 1 ORDER BY 1 
+0

Здравствуйте, я попробовал ваш метод, но я все еще заблокирован в JOIN: SELECT "myDates". "DateValue" AS "Day", count (*) AS "No of aktions" FROM "events" JOIN «myDates» ON date_trunc («день», «события». «created_at») = «myDates». «DateValue» AND («what» LIKE «AKTION%») WHERE («events». «created_at»> now() - interval '2 weeks') GROUP BY 1 ORDER BY 1 – Polopollo

+0

попробуйте изменить 'join' на' left join' – paul

+0

Точно такой же результат. Он просто добавил общее количество в конце. Я продолжаю искать тоже ... Я думаю, это потому, что строки событий не существует. – Polopollo

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