将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,现在意义重大。我心目中有两个专栏是:)