如何在SQL中划分两个不同的和?

如何在SQL中划分两个不同的和?,sql,Sql,我有三张桌子: players(playerID: integer, firstName: string, lastName: string) gamestats(playerID: integer, gameID: integer, stat: string, result: double) games(playerID: integer, gameID: integer, gametype: string) 吉文斯: gamestats.stat中有两个不同的字符串:“hits”和

我有三张桌子:

players(playerID: integer, firstName: string, lastName: string)  
gamestats(playerID: integer, gameID: integer, stat: string, result: double)  
games(playerID: integer, gameID: integer, gametype: string)
吉文斯:

  • gamestats.stat中有两个不同的字符串:“hits”和“throws”
  • gamestats.result列包含相应的成就结果
  • games.gametype列包含游戏类型,即“gameA”、“GameB”等
  • 我想要的是返回一些大致如下的内容:

    SELECT SUM('hits')/SUM('throws') AS GameA_HitsPerThrow
    WHERE games.gametype = 'gameA'
    AND games.playerID = 1;
    
    我知道这不是有效的SQL,但我希望psuedocode有意义

    任何帮助都将不胜感激。我是新来的

    编辑:

    样本数据:

    player(1, 'John', 'D')
    player(2, 'Alice', 'H')
    gamestats(1, 1708, hits, 4)
    gamestats(1, 1708, throws, 4)
    gamestats(2, 1708, hits, 8)
    gamestats(2, 1708, throws, 7)
    gamestats(1, 1709, hits, 9)
    gamestats(1, 1709, throws, 13)
    gamestats(2, 1709, hits, 6)
    gamestats(2, 1709, throws, 10)
    games(1, 1708, 'gameA')
    games(2, 1708, 'gameA')
    games(1, 1709, 'gameA')
    games(2, 1709, 'gameA')
    
    到目前为止,我已经知道了这一点,但它所做的只是返回查询中的所有行(尽管出于某种原因,它也包含重复的行):

    以下是它的回报:

    (name, result):  
    (hits, 4)  
    (throws, 4)  
    (hits, 9)  
    (throws, 13) 
    

    这只是朝我的目标迈出的一小步。

    您没有提到表名可能是这个问题的原因

    SELECT SUM('hits')/SUM('throws') AS GameA_HitsPerThrow From yourTable
    WHERE games.gametype = 'gameA';
    
    更多详情:


    您得到了重复的行,因为您没有在连接条件中包含
    playerID
    。我不太清楚为什么在
    游戏
    表中,每个玩家都有单独的行。

    你想要每场比赛、每个玩家的这些统计数据,还是什么?如果您展示一些样本数据和期望的结果,这将是最好的。另外,不要显示伪代码,而是显示您尝试的实际代码,这样我们可以帮助您修复它,而不是从头开始为您编写。哦,对不起,是的,它应该是每个玩家和每个游戏类型。我尝试在上面添加一些示例。对,我知道psuedocode中缺少很多。我只需要在正确的结构上得到帮助就可以得到这两个和的结果。我肯定会进行一些嵌套,但正如我所说的,我对SQL还是相当陌生的。
    SELECT SUM('hits')/SUM('throws') AS GameA_HitsPerThrow From yourTable
    WHERE games.gametype = 'gameA';
    
    SELECT g.gameID, g.playerID,
           SUM(CASE WHEN stat = 'hits' THEN result END)/
               SUM(CASE WHEN stat = 'throw' THEN result END) AS GameAHitsPerThrow
    FROM games AS g
    JOIN gamestats AS s ON g.gameID = s.gameID and g.playerID = s.playerID
    WHERE g.gameType = 'gameA'
    GROUP BY g.gameID, g.playerID