让我们假设我们有表任务包含
user_id date
1 2015-01-01
1 2015-01-01
1 2015-01-02
2 2015-01-03
如何显示如下数据
user_id count date
1 2 2015-01-01
1 1 2015-01-02
1 0 2015-01-03
2 0 2015-01-01
2 0 2015-01-02
2 1 2015-01-03
答案 0 :(得分:2)
如果零 重要,那么你可能会这样做:
select
user_id_date_crossjoin.user_id,
user_id_date_crossjoin.`date`,
coalesce(`count`, 0) as `count`
from
(select
user_id,
`date`
from
(select distinct user_id from tasks) all_userids,
(select distinct `date` from tasks) all_userid_dates
) user_id_date_crossjoin
left outer join
(select
user_id,
count(*) as `count`,
`date`
from tasks
group by user_id, `date`) user_id_date_counts
on user_id_date_crossjoin.user_id = user_id_date_counts.user_id
and user_id_date_crossjoin.`date` = user_id_date_counts.`date`