Oracle SQL中GROUP BY搭配HAVING的AVG筛选查询问题排查
错误原因说明
需求要求筛选平均保修时长超过3年的厂商,你现有语句的逻辑错误点如下:
- 你使用
WHERE WARRANTY_IN_YEARS>3先过滤了所有单条记录保修时长不超过3年的条目,再分组统计,相当于只统计了每个厂商里保修期超过3年的机型数量,不符合需求要求的「统计符合平均保修要求的厂商下所有机型总量」 - 分组后的聚合条件筛选需要用
HAVING子句,而非WHERE子句。
正确Oracle SQL实现
SELECT MANUFACTURER, COUNT(IME_NO) AS TOTAL_COUNT FROM MOBILE_MASTER GROUP BY MANUFACTURER HAVING AVG(WARRANTY_IN_YEARS) > 3;
逻辑验证
- 先对全表所有记录按厂商分组
- 计算每个组的平均保修时长:Samsung平均为(4+3+3)/3≈3.33>3,符合要求;Nokia平均为(2+2+5)/3=3,不符合超过3年的要求
- 对符合要求的Samsung统计全部3条机型数量,最终输出和预期结果完全一致
内容的提问来源于stack exchange,提问作者Ft.Mohak
相关产品推荐
相关产品推荐

