首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复杂的Mysql查询?在同一比赛中同一边求和值

复杂的Mysql查询?在同一比赛中同一边求和值
EN

Stack Overflow用户
提问于 2016-03-07 21:33:15
回答 1查看 32关注 0票数 0
代码语言:javascript
复制
  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,站点应该显示:

代码语言:javascript
复制
Heros                 DMG
Fiora Vayne Katarina 3350

行1,2,3,6,7,8 <=之和3350

第二排“卡塔琳娜”(第五排)没有计算,因为它是单独在另一场比赛。旁边没有菲奥拉和韦恩。

如果用户键入的是输入形式的Fiora Katarina

结果不应该显示,因为他们不是在同一一边。里文在第二队,菲奥拉和卡塔琳娜在第一队。

我怎么能这么做..。

对我来说太复杂了。我的英语不足以用单词正确地说出这个问题。我希望你能理解我想要什么。我被困在这里面,我做不到。我希望我不会有太多的落选。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-07 21:36:57

试试这个:

代码语言:javascript
复制
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

代码语言:javascript
复制
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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35854486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档