繁体   English   中英

如何根据其他列值 SQL SUM() 列

[英]How to SUM() columns based on other column values SQL

我有一些人们投注的数据。 赌注可以是“赢”、“输”或“待定”。 我想获得人们下注的金额和他们赢得的金额。

赢得的金额应该是金额 * 赔率,但如果是奖金投注 (1),它将从总数中减去原始本金(金额)。 奖金投注不包括总赢额中的原始本金。

此外,amountbet 不应包括奖金投注的金额,因为它们是比赔钱更多的代币。 希望在一个 SQL 中。

我已经走到这一步了......

SELECT *, SUM(amount) AS amountbet 
FROM bets 
WHERE club = 2 
  AND result <> 'pending'
  AND bonus = 0
GROUP BY user

我也有这个 SQL 语句

SELECT *, SUM(amount * odds - (amount * bonus)) AS amountwon 
FROM bets 
WHERE club = 2 
  AND result = 'won' 
GROUP BY user

因此,如果是奖金投注,它将减去金额或减去金额 * 0 即 = 0

如果没有,我可能可以解决,但如果有一种优雅的方式我想尝试。

谢谢

数据库表看起来像这样

ID | user | amount | odds | result | bonus | club | 

您可以在SUM()使用CASE表达式来应用所需的过滤。

SELECT
  user,
  SUM(                                   amount    )  AS total_amount,
  SUM(CASE WHEN result  = 'won'     THEN amount END)  AS amount_won,
  SUM(CASE WHEN result <> 'pending' THEN amount END)  AS amount_bet
FROM
  bets 
WHERE
  club = 2 
GROUP BY
  user

其中没有ELSE ,它隐式执行ELSE NULL ,然后NULL被聚合有效地忽略。

您可以使用case表达式使用conditional aggregation

SELECT User,
  sum (case when result in ('won','lost') then amount end) as AmountBet,
  sum (case when result='won' then amount end) as AmountWon
FROM bets 
WHERE club = 2 
GROUP BY user

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM