因此,最终我试图展示一位投手在我的棒球联盟中获得Cy Young奖的总次数,然后他们在本赛季获得该奖项,但按联赛名称排序,因为一名投手可以在同一年在不同的联赛中获得该奖项。
这就是我试图显示数据的方式:Andrew Jones (4) - 2021,2020 (18+);2021 (28+);2021 (38+),因此我需要Seasons列来显示这样的数据: 2021,2020 (18+);2021 (28+);2021 (38+)
我有3个mySQL表(季节、联赛、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+)。我知道我很亲近,所以任何帮助都是非常感谢的!
发布于 2021-11-11 19:06:39
您需要两个级别的聚合:
SELECT PLAYER_NAME,
SUM(counter) AS TotalWins,
GROUP_CONCAT(years, ' (', LEAGUE_NAME, ')' ORDER BY LEAGUE_NAME, years) AS Seasons
FROM (
SELECT PLAYER_NAME, L.LEAGUE_NAME,
COUNT(*) counter,
GROUP_CONCAT(S.SEASON_YEAR ORDER BY S.SEASON_YEAR DESC) AS years
FROM CY_YOUNG C
JOIN SEASONS S ON S.SEASON_ID = C.SEASON_ID
JOIN LEAGUES L ON L.LEAGUE_ID = S.LEAGUE_ID
WHERE C.Place = 1
GROUP BY C.PLAYER_NAME, L.LEAGUE_NAME
) t
GROUP BY PLAYER_NAME
HAVING TotalWins > 1
ORDER BY TotalWins DESC; 见演示。
https://stackoverflow.com/questions/69932878
复制相似问题