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

在PGadmin4编写统计球场进球数SQL运行出现GROUP BY错误如何解决

报错原因及修复方案

核心报错原因

你收到的报错直接来源于内层第一个子查询的语法不符合PostgreSQL的执行规则:

  • 该子查询中同时查询了非聚合字段game.Stadiumid和聚合函数SUM(Amount),但没有添加GROUP BY game.Stadiumid子句。SQL要求使用聚合函数后,所有未被聚合包裹的查询字段都必须出现在GROUP BY子句中,否则就会抛出该字段未被分组或聚合的错误。

其他存在的逻辑问题

除了直接触发报错的问题外,你的查询还有几处逻辑错误会导致无法得到预期结果:

  1. 外层查询的T.SUM(Amount)写法错误,内层子查询返回的临时表T中不存在Amount字段,只有已经聚合完成的总进球数字段Sum,不需要重复执行聚合操作
  2. UNION两侧子查询的列名未对齐,第二个子查询自定义的unplayedStadiumid、unplayedSum别名虽然不会影响执行(UNION默认取第一个子查询的列名),但属于不规范写法,容易引发逻辑混淆
  3. 隐式连接FROM game,score可读性差,更推荐使用显式的INNER JOIN写法明确关联逻辑
  4. 可以用UNION ALL替代UNION,两个子查询返回的球场ID不会重复,不需要额外去重,能提升查询效率

修正后的查询代码

query = sql.SQL("""
    SELECT T.Stadiumid, T.Sum 
    FROM(
        SELECT game.Stadiumid, SUM(score.Amount) AS Sum 
        FROM game
        INNER JOIN score ON game.Matchid = score.Matchid
        GROUP BY game.Stadiumid
         
        UNION ALL
         
        SELECT stadium.Stadiumid, 0 AS Sum
        FROM stadium 
        WHERE stadium.Stadiumid NOT IN (SELECT DISTINCT game.Stadiumid FROM game)
    ) AS T 
    ORDER BY T.Sum DESC, T.Stadiumid ASC
""")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:24:02