2016-08-14 42 views
0

指望我有這樣的一個表:Mysql的使用條件

+---------------+--------+-----------------+ 
| ReservationID | UserID | ReservationDate | 
+---------------+--------+-----------------+ 
|    1 | 10002 | 04_04_2016  | 
|    2 | 10003 | 04_04_2016  | 
|    3 | 10003 | 07_04_2016  | 
|    4 | 10002 | 04_04_2016  | 
|    5 | 10002 | 04_04_2016  | 
|    6 | 10002 | 06_04_2016  | 
+---------------+--------+-----------------+ 

我使用這個查詢來算多少保留我的每個用戶有:

SELECT UserID, COUNT(UserID) as Times FROM mytable GROUP BY UserID ORDER BY Times DESC 

,它給了我這樣的結果:

+--------+-------+ 
| UserID | Times | 
+--------+-------+ 
| 10002 |  4 | 
| 10003 |  2 | 
+--------+-------+ 

但是,如果我的用戶在特定日期有多個預留,我想計數一個。例如用戶10002有3個預訂2016年4月4日,這應該是算1.我想要得到這樣的結果:

+--------+-------+ 
| UserID | Times | 
+--------+-------+ 
| 10002 |  2 | 
| 10003 |  2 | 
+--------+-------+ 

我怎樣才能得到?

感謝

回答

0

使用countdistinct代替:

SELECT UserID, COUNT(DISTINCT ReservationDate) as Times 
FROM mytable 
GROUP BY UserID 
ORDER BY Times DESC 
+0

用戶10002有3個預訂2016年4月4日,這應該是算1.這意味着應該對ReservationDate關係 – berkist34

+0

@ berkist34 - 對不起,輸入得太快了。我認爲你需要'count(distinct reservationdate)'? – sgeddes

+0

它工作。感謝 – berkist34

0
SELECT 
    m.UserID, 
    count(distinct lj.ReservationDate) as Times 
FROM mytable m 
    left join mytable lj on lj.UserID = m.UserId 
GROUP BY 
    m.UserId 
ORDER BY 
    Times 
+0

與此查詢,用戶受其他用戶的保留,我不想要的影響。我不想指望一個用戶在特定日期有多個預訂 – berkist34