2015-05-31 37 views
-1

讓我們想象一下,我們有表的任務包含如何進行查詢?

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

您沒有回答 –

+0

您沒有PRIMARY KEY,可能會及時證明存在問題 – Strawberry

回答

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

+1

很高興聽到它。 :)如果你沒有得到更好的解決方案,請你接受它作爲答案? –

+1

我正在考慮在應用程序層中執行查詢可能會很慢的大數據 –

+0

這很有道理,@OmarMakled。我希望我能回答「在應用程序層執行」。那會釘牢它。這就是生活。 –