【发布时间】:2021-12-24 05:01:26
【问题描述】:
所以最终我想显示投手在我的棒球联盟中赢得赛扬奖的总次数,然后是他们赢得该奖项的赛季年份,但按联盟名称排序,因为投手本可以在同一年在不同联赛中获得该奖项。
这就是我试图显示数据的方式:Andrew Jones (4) - 2021, 2020 (18+); 2021 年(28 岁以上); 2021 (38+),因此我需要Seasons 列来吐出这样的数据:2021, 2020 (18+); 2021 年(28 岁以上); 2021 年(38 岁以上)
我有 3 个 mySQL 表(SEASON、LEAGUES、CY_YOUNG):
联赛
| LEAGUE_ID | LEAGUE_NAME |
| -------- | -------------- |
| 1 | 18+ |
| 2 | 28+ |
| 3 | 38+ |
| 4 | 48+ |
季节
| SEASON_ID| LEAGUE_ID | SEASON_YEAR |
| -------- | -------------| ----------- |
| 332 | 1 | 2021 |
| 333 | 2 | 2021 |
| 334 | 3 | 2021 |
| 335 | 4 | 2021 |
| 300 | 1 | 2020 |
| 301 | 2 | 2020 |
| 302 | 3 | 2020 |
| 303 | 4 | 2020 |
CY_YOUNG
| SEASON_ID | PLAYER_NAME | PLACE |
| -------- | -------------- | ----------|
| 332 | Andrew Jones | 1 |
| 332 | Mike Smith | 2 |
| 333 | Andrew Jones | 1 |
| 333 | Jacob Grimes | 2 |
| 334 | Andrew Jones | 1 |
| 334 | Travis Deane | 2 |
| 300 | Andrew Jones | 1 |
这是我当前的 SQL 查询:
SELECT PLAYER_NAME, COUNT(ID) AS TotalWins, GROUP_CONCAT(DISTINCT CONCAT(S.SEASON_YEAR,' (',L.LEAGUE_NAME)
ORDER BY S.SEASON_YEAR DESC SEPARATOR '), ') AS Seasons
FROM CY_YOUNG
JOIN SEASONS S ON S.SEASON_ID = CY_YOUNG.SeasonID
JOIN LEAGUES L ON L.LEAGUE_ID = S.LEAGUE_ID
WHERE CY_YOUNG.Place = 1
GROUP BY PLAYER_NAME
HAVING TotalWins > 1
ORDER BY TotalWins DESC;
Seasons 列目前的吐槽是这样的:2021 (18+), 2020 (18+), 2021 (38+) 但我希望它像这样吐槽:2021, 2020 (18+); 2021 年(28 岁以上); 2021 年(38 岁以上)。我知道我很接近所以任何帮助表示赞赏!
【问题讨论】:
-
我认为您需要在 concat 中使用另一个 group_concat,因为您首先要连接每个球员每年的联赛,然后仅聚合每个用户。您可能需要在子查询中执行第一个 group_concat 并在外部查询中使用其输出。
-
谢谢影子,理论上我知道这是我需要做的,但由于某种原因,我似乎无法让我的大脑用 SQL 翻译它。
标签: mysql group-by count sum group-concat