报错Error 979: not a GROUP BY expression,SQL查询最后接触日期失败
解决Oracle Error 979: not a GROUP BY expression问题
这个Error 979是Oracle数据库专属的报错,本质是你写的SQL违反了GROUP BY的核心规则:SELECT子句里的非聚合函数列,必须全部出现在GROUP BY子句中。
咱们来拆解你的SQL问题:
- 你在SELECT里选了
CDC.pat_id(非聚合列)和MAX(SOC.contact_date)(聚合函数) - 但你的GROUP BY只写了
SOC.contact_date,这完全不对路——你要按患者分组取最新接触日期,GROUP BY的对象应该是患者ID才对! - 另外你的SQL还有个小语法错误:
MAX(SOC.contact_date),这里多了个逗号,得删掉,不然也会触发语法报错。
修改后的正确SQL如下:
SELECT CDC.pat_id, MAX(SOC.contact_date) FROM hb61.cdcsaar_patients CDC JOIN clarity.social_hx SOC ON CDC.pat_id=SOC.pat_id LEFT OUTER JOIN clarity.smoking_cess_hx CESS ON CDC.pat_id=CESS.pat_id LEFT OUTER JOIN clarity.social_hx_alc_use ALC on CDC.pat_id=ALC.pat_id GROUP BY CDC.pat_id;
简单解释下修改逻辑:
- 删掉了SELECT末尾多余的逗号,修复语法问题
- 将GROUP BY的字段改成
CDC.pat_id,这样就符合Oracle的规则:非聚合列CDC.pat_id出现在GROUP BY里,聚合函数MAX(SOC.contact_date)用来计算每个患者的最新接触日期 - 如果你之后需要在SELECT里加其他非聚合列(比如患者姓名之类的),记得也要把这些列加到GROUP BY子句里哦
内容的提问来源于stack exchange,提问作者RNae75
相关产品推荐
相关产品推荐

