【问题标题】:Is the following SQL statement correct?下面的 SQL 语句是否正确?
【发布时间】:2020-10-04 06:29:18
【问题描述】:

目标(~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;

【问题讨论】:

  • 你尝试的时候发生了什么?
  • 这是您今天的第四个问题。它们都与同一个数据集相关。一个已关闭,您收到了其他两个的答案,您没有接受。我建议在发布新问题之前花点时间查看您收到的答案和 cmets,并可能尝试提高问题的质量。见how do I ask a good question?What should I do when someone answers my question?
  • 这是我接受更改之前的最后一个。如果你能告诉我它是否适合我想做的事情,请告诉我。

标签: sql select greatest-n-per-group


【解决方案1】:

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)

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

【讨论】:

  • 我想知道你能否澄清一下 g. mean 和 g mean,g1 也是什么意思。
  • @wavekootah:这些是表格的别名g 代表外部查询中的表goalsg1 代表子查询中的goals
  • 我不确定子查询是什么,您所说的 g1 在这种情况下意味着目标?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多