将SQL查询与不同的WHERE原因组合在一起
我写了一个包含游戏统计数据的数据库,包括赢家、输家和赢钱。我现在正试着为它做统计 我试图为这些游戏统计数据,比如玩家的赢/输次数,输钱和赢钱 到目前为止,我已经找到了三个查询来实现这一点将SQL查询与不同的WHERE原因组合在一起,sql,Sql,我写了一个包含游戏统计数据的数据库,包括赢家、输家和赢钱。我现在正试着为它做统计 我试图为这些游戏统计数据,比如玩家的赢/输次数,输钱和赢钱 到目前为止,我已经找到了三个查询来实现这一点 SELECT COUNT(winner) AS wins, COUNT(loser) AS losses FROM coinflipper_games WHERE winner = "dba92393-5bbd-365f-8fe7-55be2707caf3" OR loser
SELECT COUNT(winner) AS wins, COUNT(loser) AS losses
FROM coinflipper_games
WHERE winner = "dba92393-5bbd-365f-8fe7-55be2707caf3"
OR loser = "dba92393-5bbd-365f-8fe7-55be2707caf3"
SELECT SUM(money)
FROM coinflipper_games
WHERE winner = "dba92393-5bbd-365f-8fe7-55be2707caf3"
SELECT SUM(money)
FROM coinflipper_games
WHERE loser = "dba92393-5bbd-365f-8fe7-55be2707caf3"
问题是,使用三个查询根本不有效,所以我尝试将其减少为一个。有人知道我能做什么吗?使用条件聚合:
SELECT COUNT(winner) AS wins, COUNT(loser) AS losses,
SUM(CASE WHEN winner = 'dba92393-5bbd-365f-8fe7-55be2707caf3' THEN money ELSE 0 END) as winnings,
SUM(CASE WHEN loser = 'dba92393-5bbd-365f-8fe7-55be2707caf3' THEN money ELSE 0 END) as losings
FROM coinflipper_games
WHERE 'dba92393-5bbd-365f-8fe7-55be2707caf3' IN (winner, loser);
SELECT
SUM(winner = 'dba92393-5bbd-365f-8fe7-55be2707caf3') AS wins,
SUM(loser = 'dba92393-5bbd-365f-8fe7-55be2707caf3') AS losses,
SUM(money * CASE WHEN winner = 'dba92393-5bbd-365f-8fe7-55be2707caf3' THEN 1 ELSE -1 END) AS total_money
FROM coinflipper_games
WHERE 'dba92393-5bbd-365f-8fe7-55be2707caf3' IN (winner, loser)
注意,我用单引号替换了双引号。单引号是字符串分隔符的SQL标准。这也简化了WHERE
子句
注:
以上重复了您在问题中的查询。你可能真的打算计算赢家和输家以及金额。这将是:
SELECT SUM(CASE WHEN winner = 'dba92393-5bbd-365f-8fe7-55be2707caf3' THEN 1 ELSE 0 END) as wins,
SUM(CASE WHEN loser = 'dba92393-5bbd-365f-8fe7-55be2707caf3' THEN 1 ELSE 0 END) as losses,
SUM(CASE WHEN winner = 'dba92393-5bbd-365f-8fe7-55be2707caf3' THEN money ELSE 0 END) as winnings,
SUM(CASE WHEN loser = 'dba92393-5bbd-365f-8fe7-55be2707caf3' THEN money ELSE 0 END) as losings
FROM coinflipper_games
WHERE 'dba92393-5bbd-365f-8fe7-55be2707caf3' IN (winner, loser);
使用条件聚合,如下所示:
SELECT SUM(case when winner='dba92393-5bbd-365f-8fe7-55be2707caf3' then 1 else 0 end) AS wins,
SUM(case when loser='dba92393-5bbd-365f-8fe7-55be2707caf3' then 1 else 0 end) AS losses,
SUM(CASE WHEN winner = 'dba92393-5bbd-365f-8fe7-55be2707caf3' THEN money ELSE 0 END) as winnings,
SUM(CASE WHEN loser = 'dba92393-5bbd-365f-8fe7-55be2707caf3' THEN money ELSE 0 END) as losings
FROM coinflipper_games
WHERE winner='dba92393-5bbd-365f-8fe7-55be2707caf3'
OR loser='dba92393-5bbd-365f-8fe7-55be2707caf3'
您可以使用条件聚合来完成此操作:
SELECT COUNT(winner) AS wins, COUNT(loser) AS losses,
SUM(CASE WHEN winner = 'dba92393-5bbd-365f-8fe7-55be2707caf3' THEN money ELSE 0 END) as winnings,
SUM(CASE WHEN loser = 'dba92393-5bbd-365f-8fe7-55be2707caf3' THEN money ELSE 0 END) as losings
FROM coinflipper_games
WHERE 'dba92393-5bbd-365f-8fe7-55be2707caf3' IN (winner, loser);
SELECT
SUM(winner = 'dba92393-5bbd-365f-8fe7-55be2707caf3') AS wins,
SUM(loser = 'dba92393-5bbd-365f-8fe7-55be2707caf3') AS losses,
SUM(money * CASE WHEN winner = 'dba92393-5bbd-365f-8fe7-55be2707caf3' THEN 1 ELSE -1 END) AS total_money
FROM coinflipper_games
WHERE 'dba92393-5bbd-365f-8fe7-55be2707caf3' IN (winner, loser)
上述查询将返回用户赢或输的总金额。
如果需要两个不同的列:
SELECT
SUM(winner = 'dba92393-5bbd-365f-8fe7-55be2707caf3') AS wins,
SUM(loser = 'dba92393-5bbd-365f-8fe7-55be2707caf3') AS losses,
SUM(CASE WHEN winner = 'dba92393-5bbd-365f-8fe7-55be2707caf3' THEN money ELSE 0 END) AS money_won,
SUM(CASE WHEN loser = 'dba92393-5bbd-365f-8fe7-55be2707caf3' THEN money ELSE 0 END) AS money_lost
FROM coinflipper_games
WHERE 'dba92393-5bbd-365f-8fe7-55be2707caf3' IN (winner, loser)
请参阅。Thank you:)从未理解如何使用该用例,这非常有意义。Thank you,现在意义重大:)Thank you,现在意义重大。我心目中有两个专栏是:)