首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于使用多个SQL GROUP语句的问题

问关于使用多个SQL GROUP语句的问题
EN

Stack Overflow用户
提问于 2021-11-11 18:02:14
回答 1查看 56关注 0票数 3

因此,最终我试图展示一位投手在我的棒球联盟中获得Cy Young奖的总次数,然后他们在本赛季获得该奖项,但按联赛名称排序,因为一名投手可以在同一年在不同的联赛中获得该奖项。

这就是我试图显示数据的方式:Andrew Jones (4) - 2021,2020 (18+);2021 (28+);2021 (38+),因此我需要Seasons列来显示这样的数据: 2021,2020 (18+);2021 (28+);2021 (38+)

我有3个mySQL表(季节、联赛、CY_YOUNG):

联赛

代码语言:javascript
复制
| LEAGUE_ID | LEAGUE_NAME   |
| -------- | -------------- |
| 1        | 18+            |
| 2        | 28+            |
| 3        | 38+            |
| 4        | 48+            |

季节

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

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

代码语言:javascript
复制
   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+)。我知道我很亲近,所以任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-11 19:06:39

您需要两个级别的聚合:

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

见演示。

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

https://stackoverflow.com/questions/69932878

复制
相关文章

相似问题

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