【问题标题】:How to use Group By after Naturally Joining Multiple Tables自然连接多个表后如何使用 Group By
【发布时间】:2018-05-03 04:04:43
【问题描述】:

这是一道作业题。

我有一个团队:

teamid | teamcity | name

桌游:

gameid | date | gamecity

还有一个玩过的桌面游戏

gameid | teamid | teamscore

我想要做的是只选择两支球队所在城市都不是比赛所在城市的比赛。

例如,如果多伦多猛龙队和芝加哥公牛队在纽约打了一场比赛,那将会被选中。

我尝试了几种不同的方法,包括:

WITH TEMP as (SELECT * FROM GAME NATURAL JOIN 
GAME_PLAYED NATURAL JOIN TEAM WHERE teamcity != gamecity) 
SELECT gameid, gamecity, teamcity, teamname, teamscore FROM TEMP GROUP BY 
gameid, gameid HAVING COUNT(gameid) > 1;

和:

SELECT gameid, gamecity, teamcity, teamname, teamscore FROM GAME 
NATURAL JOIN GAME_PLAYED NATURAL JOIN TEAM WHERE teamcity != gamecity
GROUP BY gameid HAVING COUNT(gameid) > 1;

我不确定从这里去哪里。最后一个给我一个错误:“列“teams.teamcity”必须出现在 GROUP BY 子句中或用于聚合函数中”。

【问题讨论】:

    标签: database postgresql select


    【解决方案1】:

    我想通了:

    SELECT gameid, gamecity, teamcity, teamname, teamscore FROM GAME_PLAYED 
    NATURAL JOIN GAME NATURAL JOIN TEAM WHERE gameid IN
    (SELECT gameid FROM GAME NATURAL JOIN GAME_PLAYED NATURAL JOIN TEAM 
    WHERE teamcity != gamecity GROUP BY gameid, gameid HAVING COUNT(gameid) 
    > 1) ORDER BY gameid;
    

    【讨论】:

    • 你可以接受这个答案,这让其他人知道它已经解决了。谢谢。 你可能想顺便学习一下如何使用内连接,自然连接非常有限。
    • @Used_By_Already 这两天不会让我接受答案。谢谢,我一定会研究内部连接!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    相关资源
    最近更新 更多