合并sym33、sym表计算svcdate差值SQL出现GROUP BY报错问询
报错原因
- 第一个查询(查询
symphony_hvh_db.sym33.dx表的部分)使用了max(SVCDATE)、min(SVCDATE)聚合函数,但没有添加GROUP BY PATIENTID子句,聚合维度不明确,导致数据库无法识别非聚合字段PATIENTID的分组逻辑,抛出GROUP BY表达式无效的报错。 - 原有逻辑还存在两处不符合需求的问题:
- 仅对sym表的计算结果做了
days>90的过滤,sym33表的计算结果没有做对应过滤 limit 100仅限制了sym表的查询结果,没有作用于合并后的整体结果
- 仅对sym表的计算结果做了
修正后的SQL
create temporary table sand_scipher_ds_db.public.Rf as ( -- 两张表分别分组计算、过滤后再合并 select PATIENTID, max(SVCDATE)-min(SVCDATE) as days from symphony_hvh_db.sym33.dx group by PATIENTID having max(SVCDATE)-min(SVCDATE) > 90 union all select PATIENTID, max(SVCDATE)-min(SVCDATE) as days from symphony_hvh_db.sym.dx group by PATIENTID having max(SVCDATE)-min(SVCDATE) > 90 ); select * from sand_scipher_ds_db.public.Rf limit 100;
补充说明
- 如果你使用的数据库支持HAVING子句引用SELECT中定义的别名,可以将HAVING部分的计算替换为
having days>90,简化写法 - 如果需要对合并后的结果去重,可以将
union all替换为union
内容的提问来源于stack exchange,提问作者User1011
相关产品推荐
相关产品推荐

