如何进行查询?

时间:2015-05-31 00:18:02

标签: mysql join group-by

让我们假设我们有表任务包含

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       

1 个答案:

答案 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`

请参阅http://sqlfiddle.com/#!9/e17090/3