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行1,2,3,6,7,8 <=之和3350
第二排“卡塔琳娜”(第五排)没有计算,因为它是单独在另一场比赛。旁边没有菲奥拉和韦恩。
如果用户键入的是输入形式的Fiora Katarina
结果不应该显示,因为他们不是在同一一边。里文在第二队,菲奥拉和卡塔琳娜在第一队。
我怎么能这么做..。
对我来说太复杂了。我的英语不足以用单词正确地说出这个问题。我希望你能理解我想要什么。我被困在这里面,我做不到。我希望我不会有太多的落选。
发布于 2016-03-07 21:36:57
试试这个:
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子查询使用分组来识别所有指定玩家位于同一侧的匹配。它返回所有这些播放器的SUM of dmg值。外部查询只计算总数。
编辑:
对于更通用的解决方案,您可以使用@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 heroesDemo here
https://stackoverflow.com/questions/35854486
复制相似问题