我有一张包含各种锦标赛结果的表格(仅显示此案例的相关字段):
name,lugar,id,formato
我需要根据玩家的数量及其结果来制作一个不同的值。
name是锦标赛名称,lugar是玩家获得的地方,id为玩家标识符,formato是锦标赛特定领域。
快速示例:
for formato = X,lugar = 1 =>如果名称的总和> 8,则为8分32。
我正在尝试处理计数和案例,搜索但未找到合适的答案。
也许我应该分开表?
此刻我有这个用来总结分数,但不检查formato的球员数。
SELECT name, id, ROUND((sum(pontos)/((sum(rondas)+sum(byes))*3)*100),2) as Performance,
sum(case
when lugar = '1' then 8
when lugar = '2' then 6
when lugar > '2' AND lugar < '5' then 4
when lugar > '4' AND lugar < '9' then 2
else null end)as Pontos
FROM players
WHERE season='0'
GROUP BY id
ORDER BY `Pontos` DESC, `Performance` DESC
我已经尝试使用formato ='X'添加一个案例然后总和,但我得到了一个sql错误。
示例填充表:
name id format lugar
maio 1 STD 1
maio 2 STD 2
abril 1 STD 4
abril 3 STD 1
junho 1 MDR 5
junho 2 MDR 1
julho 3 MDR 2
julho 4 MDR 8
期望结果有条件: 如果format = STD,当lugar = 1时,得到8分,lugar = 2得到6分。 如果format = MDR,当lugar = 1时,给出5分,lugar = 2给出3分 如果count id,其中format = STD大于3(正好和示例)1个额外点
如果count id在format = STD(例子)中,根据lugar给出的点会给出不同的点。
所以,对于填充表格,它会给出类似的内容:
id points performance
1 17 50
2 10 40
3 4 60
4 1 40
(没有检查值,只是预期结果的示例)。
我想要实施这种条件。
答案 0 :(得分:1)
如果我理解正确,您正在寻找嵌套的case when
:
SELECT
name
, id
, ROUND((sum(pontos)/((sum(rondas)+sum(byes))*3)*100),2) as Performance,
sum( case when formato ='X' THEN
(case
when lugar = '1' then 8
when lugar = '2' then 6
when lugar > '2' AND lugar < '5' then 4
when lugar > '4' AND lugar < '9' then 2
else null end)
END
) as Pontos
FROM players
WHERE season='0'
GROUP BY dci
ORDER BY `Pontos` DESC, `Performance` DESC
你可以为formato使用不同的案例
SELECT
name
, id
, ROUND((sum(pontos)/((sum(rondas)+sum(byes))*3)*100),2) as Performance,
sum( case
when formato ='X' THEN
(case
when lugar = '1' then 8
when lugar = '2' then 6
when lugar > '2' AND lugar < '5' then 4
when lugar > '4' AND lugar < '9' then 2
else null end)
when formato = 'Y' THEN 100 END
END
) as Pontos
FROM players
WHERE season='0'
GROUP BY dci
ORDER BY `Pontos` DESC, `Performance` DESC