【发布时间】:2021-04-03 08:16:03
【问题描述】:
我搜索了一下,没有答案,我正在做一个练习,我有 4 张桌子
表“比赛作为t”
| ID | NAME | CODE |
|---|---|---|
| 1 | Roland Garros | RG |
| 2 | Australian open | AO |
| 3 | US open | US |
| 4 | Wimbledon | WI |
...
表“试用为e”
| ID | YEAR | GENDER_TRIAL | ID_TOURNAMENT (fk_toTournament) |
|---|---|---|---|
| 1 | 2010 | Male | 1 |
| 2 | 2010 | Female | 1 |
| 3 | 2011 | Female | 2 |
| 4 | 2011 | Male | 2 |
| 5 | 2011 | Male | 1 |
...
表格“match_tennis as mt”
| ID | ID_trial (fk_toTrial) | ID_winner (fk_toPlayer) | ID_loser (fk_toPlayer) |
|---|---|---|---|
| 1 | 2 | 1 | 2 |
| 2 | 3 | 3 | 1 |
| 3 | 1 | 2 | 3 |
...
表“玩家作为 p” |身份证 |姓名 |性别 | |:--:|:---------------:|:------:| | 1 |拉斐尔·纳达尔 |男 | | 2 |罗杰·费德勒 |男 | | 3 |塞雷娜·威廉姆斯 |女 | | 2 |威廉姆斯维纳斯 |女 |
...
所以我的表有很多记录,预期的结果是
| ID (t.id) | Tournament (t.Name) | Code (t.Code) | Female Player with most wins (p.Name) | Wins (MAX(COUNT(WINNER))) | Male Player with most wins (p.Name) | Wins (MAX(COUNT(WINNER))) |
|---|---|---|---|---|---|---|
| 1 | Roland Garros | RG | Serena Williams | 5 | Rafael Nadal | 7 |
| 2 | Australian open | AO | Venus Williams | 3 | Roger Federer | 9 |
| 3 | US open | US | Simona Halep | 7 | Novak Djokovic | 5 |
| 4 | Wimbledon | WI | Wozniacki Caroline | 3 | Andy Murray | 4 |
类似的东西......我无法更改我的数据库表,到目前为止,我得到了所有锦标赛以及每个玩家的所有胜利
我的查询是这样的
SELECT t.id, t.name, t.code, p.name, COUNT(*) as wins "
+ "FROM tournament t "
+ "INNER JOIN trial e ON e.id_tournament = t.id "
+ "INNER JOIN match_tennis mt ON mt.id_trial = e.id "
+ "INNER JOIN player p ON mt.id_winner = p.id "
+ "GROUP BY t.name, p.name "
+ "ORDER BY wins DESC";
我有这样的东西作为预期的输出
【问题讨论】:
-
1.至少,样本数据
Table "match_tennis as mt"与您的预期结果不匹配。 2. 你的 MySQL 是什么版本的? -
我是 stackoverflow 的新手。我的意思是,发布问题,就像我的第三个问题一样...关于表格,我可以为您提供创建和填充数据库的查询,但我知道如何.. . 预期的结果是和示例它与其他表格无关,实际上 match_tennis 也不是......我将对其进行编辑以清除。