Mysql 使用子查询选择计数

Mysql 使用子查询选择计数,mysql,subquery,Mysql,Subquery,我保存两个系列中最好的一个系列的数据。因此,每场比赛都有两场与同一支球队相关的比赛 这意味着每场比赛都有两场比赛,表格中记录了每支球队每场比赛的记录 因此,每1场比赛有4条记录(A队第1场、A队第2场、B队第1场和B队第2场)。一场比赛有3种可能的结果:2-0、1-1或0-2 示例:A队与B队、C队和D队进行3场比赛(2-0、2-0和1-1) select语句的预期结果如下: matchId | Team | Wins 1 | A | 2 1 | B |

我保存两个系列中最好的一个系列的数据。因此,每场比赛都有两场与同一支球队相关的比赛

这意味着每场比赛都有两场比赛,表格中记录了每支球队每场比赛的记录

因此,每1场比赛有4条记录(A队第1场、A队第2场、B队第1场和B队第2场)。一场比赛有3种可能的结果:2-0、1-1或0-2

示例:A队与B队、C队和D队进行3场比赛(2-0、2-0和1-1) select语句的预期结果如下:

matchId | Team | Wins 
1       |  A   |  2
1       |  B   |  0
2       |  A   |  2
2       |  C   |  0
3       |  A   |  1
3       |  D   |  1
实际数据:

matchId | gameId |teamName | Victory | Loss
2959      3635      Frost       0       1
2959      3490      Frost       1       0
2959      3490      SKT         0       1
2959      3635      SKT         1       0
2956      3487      Frost       0       1
2956      3573      Frost       0       1
2956      3573      Shield      1       0
2956      3487      Shield      1       0
2923      3452      SKT         1       0
2923      3507      SKT         1       0
2923      3507      IM1         0       1
2923      3452      IM1         0       1
因此,我正在寻找以下代码:

matchId |teamName | Wins
2959      Frost       1
2959      SKT         1
2956      Frost       0
2956      Shield      2
2923      SKT         2
2923      IM1         0
这是我当前的代码,试图找出它:

SELECT DISTINCT b.matchId, c.teamName, d.Wins
FROM PoolOfTeams a JOIN (
    SELECT t1.matchId, t1.gameId, t1.teamName FROM poolOfTeams t1
) b on (b.matchId = a.matchId) JOIN (
    SELECT t2.gameId, t2.teamName FROM poolOfTeams t2
) c ON (c.gameId = b.gameId) JOIN (
    SELECT t3.teamName, SUM(t3.matchVictory) AS Wins
    FROM poolOfTeams t3 group by matchId
) d ON (d.teamName = c.teamName);
试一试

我想你要找的是“分组”


编辑:交换组和order语句的顺序。谢谢Rahul。

订购人
不应该在
分组人
之后吗?你可能需要
count(win)
。我总是第一次就把订单搞砸,不管我用了多少次。这就像插上USB线一样,100%的时候,它都不起作用。不起作用。我认为主要的问题是每1场比赛有4项记录。A队和B队在第1场比赛中创造了2项记录,A队和B队在第2场比赛中又创造了2项记录。因此,比赛有可能是2-0、1-1或0-2。因此,是的,我希望它按matchId分组,但我也希望它能将特定球队在特定比赛中的获胜数量相加,即2、1或0。也许我需要查看一个更完整的表格示例,但您每场比赛显示4条记录,但只有2条记录在“获胜”列中有“1”。SUM(win)将根据获胜的数量为每支球队提供每场比赛0、1或2的分数。我认为Matt的答案与您的样本数据吻合得很好。如果你发布Matt的答案不会产生错误结果的样本数据,那就更好了。
SELECT   matchID, Team, SUM(Win) AS Wins
FROM     poolOfTeams
GROUP BY matchID, Team
ORDER BY Team ASC