我有一张桌子,其中包含游戏的所有轮次。每轮选手多次获得失分。我希望SUM()
每个玩家在查询中传递的轮次总分。
得分列为" sec_verdiend",轮次为" rondenaam"
这是我的疑问:
SELECT
(
SELECT IF(SUM(b.sec_verdiend) IS NULL, 0, SUM(b.sec_verdiend)) AS tot_sec_verdiend
FROM abjmehlb_db.beurt b
WHERE b.spel_id = 511 AND b.rondenaam IN('369', 'opendeur', 'puzzle') AND b.speler = 'Ger'
) as Ger,
(
SELECT IF(SUM(b.sec_verdiend) IS NULL, 0, SUM(b.sec_verdiend)) AS tot_sec_verdiend
FROM abjmehlb_db.beurt b
WHERE b.spel_id = 511 AND b.rondenaam IN('369', 'opendeur', 'puzzle') AND b.speler = 'Jasper'
) as Jasper
这就是结果:
所以,例如,如果我想要轮次的总分" 369","结局"和" Ingelijst"查询只汇总了那些轮次的得分,而不是其余部分!
我需要的输出如下,使用上面的例子。
P1:(20 + 20 + 60 + -15 + -7 + -40 =)38 | P2:(60 + 0 + 0 + -5 + -20 + -10 =)25
修改
我发现了问题,当您尝试对负数求和时查询出错了。当我总结" speler = Ger"," 369"和" opendeur"它返回123.所以有些东西正在增加负数。
感谢您的帮助。
答案 0 :(得分:0)
我希望得分“369”,“结局”和“Ingelijst”的总得分 查询只汇总了那些轮次的得分
您打算将SUM()
与CASE
语句一起使用
sum(case when rondenaam IN('369','finale','Ingelijst') then 1 else 0 end) as Total
答案 1 :(得分:0)
如果你希望每轮每位玩家获得sum
分,那么另一种选择就是使用GROUP BY
条款,例如:
SELECT rondenaam, speler, sum(sec_verdiend)
FROM abjmehlb_db
WHERE speler = 'Bart' AND rondenaam = '369'
GROUP BY rondenaam, speler;