You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL按唯一name分组统计2021年start日期对应记录数问题

错误原因分析

  • 你混淆了WHERE和HAVING的适用场景:HAVING是对分组聚合后的结果进行过滤,只能使用分组字段或者聚合计算生成的字段,所以你把start的筛选放在HAVING里的话,要么要把start放到GROUP BY(就会出现你遇到的name重复问题),要么SQL语法校验不通过报错。
  • 日期筛选属于分组前对原始数据的过滤,应该放到WHERE子句中执行,不需要放到GROUP BY或者HAVING里。

正确SQL写法

SELECT name, COUNT(*) AS Count
FROM my_table
WHERE start >= '01-JAN-21 01.00.00.000000000 AM'
GROUP BY name

如果要更严谨的覆盖2021年全年的数据(避免结束时间漏判),可以加结束时间的限制:

SELECT name, COUNT(*) AS Count
FROM my_table
WHERE start >= '01-JAN-21 00.00.00.000000000 AM' 
  AND start < '01-JAN-22 00.00.00.000000000 AM'
GROUP BY name

执行逻辑说明

  1. 先通过WHERE子句过滤掉所有非2021年的原始记录(示例中2020年1月的那条State记录会直接被排除)
  2. 剩下的符合条件的记录只按name字段分组,统计每个name对应的记录总数,就能得到你要的输出结果。

内容的提问来源于stack exchange,提问作者dataviolet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:36:08