如何获取每小时统计数?指定小时计数的SQL查询问题
解决按小时统计数据的SQL语法问题
嘿,我来帮你捋捋这个SQL的问题~
首先你的原SQL存在逻辑优先级错误:因为SQL中AND的优先级比OR高,所以你的条件会被数据库解析成:
(year=2018 and month=01 and day=02 and hour=01) OR hour=02 OR hour=03
这就意味着,查询结果会包含所有hour=02或hour=03的数据,不管日期是不是2018年1月2日,完全不符合你的需求。
修正后的两种写法
方法1:给OR条件加括号
通过括号把hour的条件包裹起来,确保日期条件和所有小时条件同时生效:
select count_hr_1, count_hr_2, count_hr_3 from db.table where year=2018 and month=01 and day=02 and (hour=01 OR hour=02 OR hour=03);
方法2:用IN替代多个OR
这种写法更简洁易读,效果和上面完全一致:
select count_hr_1, count_hr_2, count_hr_3 from db.table where year=2018 and month=01 and day=02 and hour in (01, 02, 03);
额外补充:如果是按小时统计总数
如果你的需求其实是统计每个小时的记录总数(而不是查询表中已有的count_hr_*列),可以用分组查询的方式,这样能直接得到每个小时对应的计数:
select hour, count(*) as hourly_count from db.table where year=2018 and month=01 and day=02 and hour in (01, 02, 03) group by hour;
内容的提问来源于stack exchange,提问作者Liondancer
相关产品推荐
相关产品推荐

