【问题标题】:SQL query wont run because of a strange group by Error由于错误的奇怪组,SQL 查询不会运行
【发布时间】:2022-01-09 01:10:09
【问题描述】:

我使用 PGadmin4 SQL 服务器在 python 界面中编写了这个 SQL 查询。

它应该返回一个有序的(按总和降序,如果相等则按 StadiumID 升序),其中总和是在体育场内得分的进球数。如果体育场内没有任何比赛,则总和应为 0。

比赛桌记录了所有比赛,比赛发生在哪个体育场以及人群中有多少人

体育场表有体育场的数量和拥有它的球队

得分表有进球所在的比赛、进球的球员以及他进了多少球

数据库:

query = sql.SQL("
    SELECT T.Stadiumid AS Stadiumid, T.SUM(Amount) AS Sum 
    FROM(
        (SELECT game.Stadiumid AS Stadiumid,SUM(Amount) AS Sum 
         FROM game,score 
         WHERE (game.Matchid=score.Matchid) 
         )
         UNION 
         (SELECT stadium.Stadiumid AS unplayedStadiumid,0 AS unplayedSum
          FROM stadium 
          WHERE (stadium.Stadiumid NOT IN (SELECT game.Stadiumid FROM game))
         )
         ) AS T 
    GROUP BY T.Stadiumid
    ORDER BY T.Sum DESC,T.Stadiumid
    ")

执行查询时,我收到以下错误消息:

column "game.stadiumid" must appear in the GROUP BY clause or be used in an aggregate function

LINE 1: ...d AS Stadiumid, T.SUM(Amount) AS Sum FROM((SELECT game.Stadi...

似乎是什么问题?

【问题讨论】:

  • 我假设您在 FROM 语句的第一个 SELECT 中需要一个 GROUP BY 子句

标签: python sql pgadmin-4


【解决方案1】:

我相信您的第一个内部选择中缺少 GROUP BY。在那里,您正在寻找 SUM(Amount),但您没有指定应该对哪些变量求和。

如果你想总结所有的game.Stadiumid,那么这段代码适用于你的联盟的第一部分:

SELECT game.Stadiumid AS Stadiumid,SUM(Amount) AS Sum 
                      FROM game,score 
                      WHERE (game.Matchid=score.Matchid)
                      GROUP BY game.Stadiumid

【讨论】:

  • 似乎还有一个问题,union的第二部分总是返回一个空表,可能是什么问题?
  • game 表包含stadium 表包含的所有唯一stadiumid。这就是您的条件 NOT IN (SELECT game.Stadiumid FROM game) 使所有选定行无效并且您得到一个空表的原因。
【解决方案2】:

您在此子查询中错过了 group by

(SELECT game.Stadiumid AS Stadiumid,SUM(Amount) AS Sum 
FROM game,score 
WHERE (game.Matchid=score.Matchid) 
GROUP BY game.Stadiumid -- missing group by
)

【讨论】:

    猜你喜欢
    • 2011-02-22
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多