2016-08-14 20 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 | 
+--------+-------+ 

しかし私は、ユーザーが特定の日付に複数の予約を持っている場合は1をカウントします。ユーザ10002は、2016年4月4日で3予約を持っているたとえば、それは数1である必要があり、私はこの結果を取得したい:

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

は、どのように私はそれを得ることができることができますか?代わりにdistinct

おかげ

答えて

0

使用count

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

ユーザ10002は、2016年4月4日で3予約を持っている、それは数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

このクエリでは、ユーザーは私が欲しくない他のユーザーの予約の影響を受けます。 1人のユーザーが特定の日付に複数の予約をしているとカウントしたくない – berkist34

関連する問題