2014-12-06 19 views
0

我有一個聊天記錄的數據庫,其中包含一個datime字段,該消息的作者和消息。MySQL查詢關聯dayofweek和發送消息的小時數

我不想做一個查詢,返回一個表,將星期幾與小時數關聯起來,計算髮送了多少條消息。

事情是這樣的:

+-------+--------+--------+----------+------------+---------+--------+---------+ 
| HOURS | SUNDAY | MONDAY | THURSDAY | WEDNESDAY | TUESDAY | FRIDAY | SABBATH | 
+-------+--------+--------+----------+------------+---------+--------+---------+ 
| 00 | 5 | 25 | 44  |  46  | 23 | 12 | 42 | 
| 01 | 4 | 545 | 35  |  76  | 65 | 15 | 354 | 
| 02 | 36 | 654 | 365 |  76  | 65 | 42 | 44 | 
| 03 | 3 | 578 | 678 |  83  | 21 | 32 | 88 | 
| 04 | 8 | 78 | 678 |  92  | 878 | 34 | 98 | 
| 05 | 87 | 987 | 89  |  26  | 09 | 67 | 75 | 
| 06 | 54 | 65 | 98  |  23  | 65 | 54 | 55 | 
| 07 | 98 | 64 | 07  |  43  | 656 | 42 | 47 | 
| 08 | 98 | 56 | 89  |  65  | 76 | 43 | 62 | 
| 09 | 98 | 768 | 678 |  75  | 76 | 26 | 763 | 
| 10 | 3 | 56 | 54  |  87  | 87 | 76 | 45 | 
| 11 | 39 | 567 | 236 |  76  | 897 | 12 | 62 | 
| 12 | 987 | 765 | 342 |  87  | 987 | 76 | 67 | 
| 13 | 45 | 456 | 456 |  97  | 43 | 69 | 876 | 
| 14 | 235 | 87 | 44  |  24  | 2865 | 98 | 86 | 
| 15 | 543 | 987 | 44  |  45  | 367 | 87 | 87 | 
| 16 | 897 | 87 | 64  |  37  | 898 | 67 | 98 | 
| 17 | 678 | 67 | 76  |  54  | 245 | 56 | 87 | 
| 18 | 766 | 89 | 99  |  54  | 689 | 35 | 24 | 
| 19 | 98 | 98 | 987 |  55  | 467 | 76 | 25 | 
| 20 | 45 | 73 | 789 |  62  | 98 | 35 | 177 | 
| 21 | 876 | 897 | 35  |  289 | 56 | 76 | 57 | 
| 22 | 876 | 978 | 546 |  35  | 874 | 24 | 543 | 
| 23 | 76 | 945 | 456 |  64  | 87 | 64 | 76 | 
+-------+--------+--------+----------+------------+---------+--------+---------+ 

有可能作出這樣的?

我已經試過這段代碼,我認爲是一個開始,但我真的不知道我是否在正確的方向前進。

select 
hour(sendtime) as 'HOUR', 
dayofweek(sendtime) = 1 as 'Sunday', 
dayofweek(sendtime) = 2 as 'Monday', 
dayofweek(sendtime) = 3 as 'Tuesday', 
dayofweek(sendtime) = 4 as 'Wednesday', 
dayofweek(sendtime) = 5 as 'Thursday', 
dayofweek(sendtime) = 6 as 'Friday', 
dayofweek(sendtime) = 7 as 'Sabbath', 
count(*) AS 'COUNT' 
from chat 
group by HOUR(sendtime) 

我想這個數據做出可視化usiging D3.js,一些看起來是這樣的:

http://www.imagesup.net/?di=16141790283414

感謝。

回答

0

你都非常接近,你只需要聚合函數:

select hour(sendtime) as `HOUR`, 
     sum(dayofweek(sendtime) = 1) as Sunday, 
     sum(dayofweek(sendtime) = 2) as Monday, 
     sum(dayofweek(sendtime) = 3) as Tuesday, 
     sum(dayofweek(sendtime) = 4) as Wednesday, 
     sum(dayofweek(sendtime) = 5) as Thursday, 
     sum(dayofweek(sendtime) = 6) as Friday, 
     sum(dayofweek(sendtime) = 7) as Sabbath, 
     count(*) AS 'COUNT' 
from chat 
group by HOUR(sendtime) 
order by `hour`; 

注意,你不需要圍繞列別名單引號。您應該只爲字符串和日期常量使用單引號。

+0

非常感謝,我想在使用sum()函數,但我不知道如何。 – carmolim 2014-12-11 19:09:46