【发布时间】:2022-01-18 04:17:45
【问题描述】:
问题如下:
| team | season | games_won |
|---|---|---|
| San Francisco Giants | 2010 | 92 |
| San Francisco Giants | 2011 | 86 |
| San Francisco Giants | 2012 | 94 |
| San Francisco Giants | 2013 | 76 |
| San Francisco Giants | 2014 | 88 |
| Los Angeles Dodgers | 2010 | 80 |
| Los Angeles Dodgers | 2011 | 82 |
| Los Angeles Dodgers | 2012 | 86 |
| Los Angeles Dodgers | 2013 | 92 |
| Los Angeles Dodgers | 2014 | 94 |
编写 SQL 以生成以下输出,其中第二列是每支球队获胜次数最多的赛季。下面显示了巨人队和道奇队以进行说明,但 SQL 应该同时拉动所有球队:
我有两种方法可以解决这个问题:
方法一
WITH cte_wins
AS (SELECT team,
Max(games_won) AS most_wins
FROM table_wins
GROUP BY team)
SELECT table_wins.team,
table_wins.season AS season_with_most_wins
FROM table_wins
JOIN cte_wins
ON cte_wins.team = table_wins.team
AND cte_wins.most_wins = table_wins.games_won
方法二
SELECT table_wins.team,
table_wins.season AS season_with_most_wins
FROM table_wins
JOIN (SELECT team,
Max(games_won) AS most_wins
FROM table_wins
GROUP BY team) AS sub
ON sub.team = table_wins.team
AND sub.most_wins = table_wins.games_won
方法3
有没有更好的方法来解决这个问题?我想知道我的方法是否很糟糕,也许我应该尝试其他方法。欢迎任何和所有反馈。
【问题讨论】:
-
这能回答你的问题吗? Get top 1 row of each group
-
这能回答你的问题吗? Get top 1 row of each group
标签: sql sql-server optimization subquery common-table-expression