我需要获取应用的每日报告.
报告应该告诉我访问事件页面的次数以及每个类别销售的票数.所有这些都应按天分组在一行中,如下所示:
Date | Category A | Category B | Category C | Visits
'2017-03-10'| 10 | 2 | 8 | 30
使用序列表我能够按天分组结果,但我能做的最好的是每天为每个类别排一行,即,如果我有3个类别,我每天得到3行.
解决方法:
如果事先已知固定类别的数量,这只是对现有解决方案的一些条件求和…并通过子查询添加访问所需的任何逻辑:
SELECT
date,
sum(CASE WHEN `categoryId`=1 THEN `ticketCount` END) AS `Category A`,
sum(CASE WHEN `categoryId`=2 THEN `ticketCount` END) AS `Category B`,
sum(CASE WHEN `categoryId`=3 THEN `ticketCount` END) AS `Category C`,
(SELECT count(id) FROM event_page_visits
WHERE event_id = 1 and date(created_at) = date) AS `Visits`
FROM
(
select
`list_of_dates`.`date` as `date`, `ticket_categories`.`id` as `categoryId`, `ticket_categories`.`name` as `categoryName`, count(tickets.id) as ticketCount
from (
SELECT DATE_ADD('2017-03-10', INTERVAL seq.seq DAY) AS DATE FROM seq_0_to_999 AS seq WHERE DATE_ADD('2017-03-10', INTERVAL seq.seq DAY) <= '2017-03-14'
) as list_of_dates
cross join
`ticket_categories`
left join
`tickets` on
`tickets`.`ticket_category_id` = `ticket_categories`.`id` and
`tickets`.`created_at` >= `list_of_dates`.`date` and
`tickets`.`created_at` < list_of_dates.date + INTERVAL 1 DAY
where
`ticket_categories`.`event_id` = 1
group by
`date`, `ticket_categories`.`id`
) AS q
GROUP BY
`date`
order by
`date` asc ;
而你只是得到:
| date | Category A | Category B | Category C | Visits |
|------------|------------|------------|------------|--------|
| 2017-03-10 | 4 | 3 | 2 | 10 |
| 2017-03-11 | 0 | 0 | 0 | 2 |
| 2017-03-12 | 1 | 1 | 0 | 3 |
| 2017-03-13 | 0 | 0 | 3 | 6 |
| 2017-03-14 | 0 | 0 | 0 | 0 |