我有9个州和11个时间跨度从09:00到20:00
我有一张桌子:
id | name | time | state
________________________________________
1 | aaaa | 2018-03-06 09:10:13 | NY
2 | bbbb | 2018-03-06 11:15:10 | LA
3 | cccc | 2018-03-06 13:02:11 | LA
4 | dddd | 2018-03-06 11:06:22 | NY
5 | eeee | 2018-03-06 09:33:17 | NY
6 | ffff | 2018-03-06 09:16:43 | LA
7 | gggg | 2018-03-06 17:08:36 | LA
8 | hhhh | 2018-03-06 14:25:47 | NY
9 | iiii | 2018-03-06 17:02:33 | LA
在这里,我必须为每个可能的状态和小时从09:00到20:00重复相同的查询(7个州x 11个时间跨度= 77个查询):
SELECT COUNT(*) FROM table WHERE state = "NY" AND time LIKE "% 09:%"
现在我想得到记录的数量:
获得:
在另一个问题中对于洛杉矶也一样。
是否可以使用group by
或join
将查询捆绑到7个查询而不是77个?
我不需要显示任何信息,只需要显示行数。
答案 0 :(得分:1)
您只需按州和时间
使用组select group_concat(count(date_trunc('hour',time))," X ",date_trunc('hour',time)),state
from table group by state, date_trunc('hour',time)
答案 1 :(得分:1)
您可以使用此代码!
SELECT
state
, time_hour
, count(*)
FROM
(
SELECT
state
, SUBSTR(time,12,2) AS time_hour
FROM your_table
) generate_time_hour
GROUP BY state, time_hour
答案 2 :(得分:1)
我不确定,我是否正确理解了这个问题,但这是我的解决方案:
没有连接
SELECT COUNT(*), HOUR(time) AS time, state
FROM `example`
GROUP BY state, HOUR(time)
连接
SELECT CONCAT(COUNT(*), "x", TIME_FORMAT(time, "%H")) AS cnt, state
FROM `example`
GROUP BY state, HOUR(time)