SQLite按periodOfDay分组的多条件记录数统计需求
解决SQLite按periodOfDay分组的多条件统计需求
没问题,我来帮你搞定这个SQLite的统计查询!你的需求很明确,用条件聚合就能轻松实现——也就是在GROUP BY之后,用SUM()配合CASE WHEN来分别统计符合不同条件的记录数。
直接给你完整的SQL语句,然后再拆解说明:
SELECT periodOfDay, COUNT(*) AS total_records, SUM(CASE WHEN range_1 < 36 AND range_2 < 18 THEN 1 ELSE 0 END) AS count_condition1, SUM(CASE WHEN range_1 > 36 AND range_1 < 100 AND range_2 > 18 AND range_2 < 100 THEN 1 ELSE 0 END) AS count_condition2, SUM(CASE WHEN range_1 > 100 AND range_2 > 100 THEN 1 ELSE 0 END) AS count_condition3 FROM your_table_name -- 这里替换成你的实际表名 GROUP BY periodOfDay ORDER BY periodOfDay; -- 可选,按periodOfDay排序让结果更清晰
语句拆解说明:
COUNT(*):直接统计每个periodOfDay分组下的总记录数,这是最基础的聚合函数。SUM(CASE WHEN ... THEN 1 ELSE 0 END):核心逻辑是对每条记录判断是否符合条件,符合就返回1,不符合返回0,最后用SUM()把这些1加起来,得到符合条件的记录总数。- 第一个
SUM对应你要的“range_1 < 36 且 range_2 < 18”的统计; - 第二个
SUM对应“36 < range_1 < 100 且 18 < range_2 < 100”(拆成range_1 >36 AND range_1 <100是为了逻辑更清晰,SQLite也支持连续比较写法,但分开写可读性更好); - 第三个
SUM对应“range_1 > 100 且 range_2 > 100”的统计。
- 第一个
注意点:
- 记得把
your_table_name替换成你实际的表名; - 如果你的字段可能存在
NULL值,要考虑是否需要用COALESCE处理,但从你的需求描述来看,应该不需要额外处理; - 执行这个语句后,会得到每个
periodOfDay(0、1、2)对应的四个统计值,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Soul
相关产品推荐
相关产品推荐

