gpt4 book ai didi

mysql - 复杂的 Mysql 查询?在同一场比赛的同一边求和值

转载 作者:太空宇宙 更新时间:2023-11-03 11:50:16 25 4
gpt4 key购买 nike

  heroname  dmg    matchid  side
1 Fiora 700 match1 side1
2 Vayne 850 match1 side1
3 Katarina 300 match1 side1
4 Riven 200 match1 side2
5 Katarina 12390 match2 side1
6 Fiora 200 match3 side2
7 Vayne 500 match3 side2
8 Katarina 800 match3 side2

当 Fiora、Vayne 和 Katarina 在比赛中处于同一侧时,我的查询应该计算 DMG。

如果用户输入 Fiora Vayne 和 Katarina,网站应该显示:

Heros                 DMG
Fiora Vayne Katarina 3350

3350 <= 第 1 2 3 6 7 8 行 dmgs 的总和。

第 2 个“Katarina”(第 5 行)没有计算在内,因为它在另一场比赛中是单独的。它的身边没有菲奥拉和薇恩。

如果用户在输入表单中输入 Riven Fiora Katarina

不应显示结果,因为它们不在同一侧。锐雯在第 2 面,菲奥拉和卡塔琳娜在第 1 面。

我该怎么做......

这对我来说太复杂了。我的英语不足以用文字正确地说明问题。我希望你能明白我想要什么。我坚持这个,我做不到。我希望我不会得到很多反对票。

最佳答案

试试这个:

SELECT 'Fiora, Vayne, Katarina' AS heroes, 
SUM(sum_dmg)
FROM (
SELECT SUM(dmg) AS sum_dmg
FROM mytable
WHERE heroname IN ('Fiora', 'Vayne', 'Katarina')
GROUP BY matchid, side
HAVING COUNT(DISTINCT heroname) = 3) AS t

子查询使用分组来识别所有指定玩家都在同一侧的比赛。它返回所有这些玩家的 dmg 值的 SUM。外部查询只是计算总和。

编辑:

对于更通用的解决方案,您可以按照@Gordon 的建议使用GROUP_CONCAT:

SELECT heroes, 
SUM(sum_dmg)
FROM (
SELECT GROUP_CONCAT(DISTINCT heroname ORDER BY heroname) AS heroes,
SUM(dmg) AS sum_dmg
FROM mytable
GROUP BY matchid, side
HAVING COUNT(DISTINCT heroname) = 3) AS t
GROUP BY heroes

Demo here

关于mysql - 复杂的 Mysql 查询?在同一场比赛的同一边求和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35854486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com