一列

时间:2016-12-18 11:58:06

标签: mysql

我有一张桌子,其中包含游戏的所有轮次。每轮选手多次获得失分。我希望SUM()每个玩家在查询中传递的轮次总分。

得分列为" sec_verdiend",轮次为" rondenaam" enter image description here

这是我的疑问:

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

这就是结果:

enter image description here

所以,例如,如果我想要轮次的总分" 369","结局"和" Ingelijst"查询只汇总了那些轮次的得分,而不是其余部分!

我需要的输出如下,使用上面的例子。

P1:(20 + 20 + 60 + -15 + -7 + -40 =)38 | P2:(60 + 0 + 0 + -5 + -20 + -10 =)25

修改

我发现了问题,当您尝试对负数求和时查询出错了。当我总结" speler = Ger"," 369"和" opendeur"它返回123.所以有些东西正在增加负数。

感谢您的帮助。

2 个答案:

答案 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;