GROUP BY查询报错:column 'activiteit.straat'需在GROUP BY或聚合函数中
解决GROUP BY查询的字段报错问题
你想查询重复出现的naam并对应显示straat字段,执行这条SQL时出错:
SELECT naam, straat FROM activiteit GROUP BY naam HAVING COUNT(*)>1;
收到的错误提示:
column "activiteit.straat" must appear in the GROUP BY clause or be used in an aggregate function
原因
SQL的标准规范要求:SELECT语句中出现的非聚合字段,必须全部包含在GROUP BY子句里。你只按naam分组,但SELECT里还选了straat,数据库没法确定该返回这个naam对应的哪一条straat值,所以抛出错误。
解决方案
分两种场景处理:
场景1:同一个
naam对应的straat是唯一的
直接把straat加到GROUP BY子句中,分组逻辑包含两个字段,符合SQL规范:SELECT naam, straat FROM activiteit GROUP BY naam, straat HAVING COUNT(*) > 1;场景2:同一个
naam可能对应多个straat,但你只需返回其中一个
用聚合函数(比如MIN()/MAX())指定返回哪一个straat值:SELECT naam, MIN(straat) AS straat FROM activiteit GROUP BY naam HAVING COUNT(*) > 1;如果需要保留所有重复
naam的行(而非合并成一行),可以用窗口函数筛选:SELECT naam, straat FROM ( SELECT naam, straat, COUNT(*) OVER (PARTITION BY naam) AS repeat_count FROM activiteit ) AS sub_query WHERE repeat_count > 1;
内容的提问来源于stack exchange,提问作者GJO
相关产品推荐
相关产品推荐

