首页 > 解决方案 > 下面的 SQL 语句是否正确?

问题描述

目标(~1700 行)

YEAR COUNTRY   NAME              NUM_GOALS
-------------------------------------------
2018 England   Harry Kane                6
2018 France    Antoine Griezmann         4
2014 Argentina Lionel Messi              4
2014 Brazil    Fred                      1
2010 Germany   Thomas Muller             5
2010 Japan     Shinji Okazaki            1
1992 England   Gary Linekar              6

冠军(约 500 行)

YEAR    COUNTRY NAME    ROLE
-------------------------------------------------
2018    France  Didier Deschamps    Manager
2018    France  Hugo Lloris Goalkeeper
2018    France  Paul Pogba  Midfielder
2014    Germany Joachim Loew    Manager
2014    Germany Mesut Ozil  Midfielder
2014    Germany Miroslav Klose  Forward
2002    Brazil  Da Silva    Midfielder
1994    Brazil  Da Silva    Midfielder
1998    France  Didier Deschamps    Midfielder

编写一个查询来识别每届世界杯的金靴奖得主(最高进球者)。

我不确定是否应该包含 MAX 子句。

如果我的查询需要任何调整,我将不胜感激。

这就是我想出的:

SELECT NAME, YEAR, MAX(NUM_GOALS) as NUM_GOALS 
FROM GOALS;

标签: sqlselectgreatest-n-per-group

解决方案


Yuur 查询不是有效的 SQL:子句中有聚合列和非聚合列SELECT,但没有GROUP BY子句。

如果你想要每年得分最高的人的名字,那么这是一个每组最大的问题。您不想聚合行,而是过滤它们。一个典型的选择是为此目的使用相关子查询:

select g.*
from goals g
where g.num_goals = (select max(g1.goals) from goals g1 where g1.year = g.year)

这将包括关系,如果有的话。


推荐阅读