如何在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)
吉文斯:
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