为什么 MAX 语句需要一个 Group By?
Why does MAX statement require a Group By?
我理解为什么第一个查询需要 GROUP BY
,因为它不知道将总和应用于哪个日期,但我不明白为什么第二个查询会出现这种情况。最终作为最大金额的值已经包含在 table 中 - 它不像 SUM
那样计算。谢谢
-- First Query
select
sum(OrderSales),OrderDates
From Orders
-- Second Query
select
max(FilmOscarWins),FilmName
From tblFilm
需要 GROUP BY
的不是 SUM
和 MAX
,而是 未聚合的 列。
如果你只写这个,你会得到一行,用于整个 table 中 FilmOscarWins
列的最大值:
select
max(FilmOscarWins)
From
tblFilm
如果任何一部电影获得的奥斯卡奖最多是 12 座,那么这一行就是 12 座。但是可能有多部电影,所有这些都获得了 12 座奥斯卡奖,所以如果我们要求 FilmName
除了那 12 座, 没有单一的答案。
通过添加 Group By
,我们从根本上改变了查询:而不是 return 一个数字 整个 table,它将 return 每组 一行 - 在这种情况下,意味着每部电影一行。
如果你确实想获得所有获得最多 12 次奥斯卡奖的电影的列表,你必须做一些更复杂的事情,比如使用子查询首先找到那个数字 (12),然后找到匹配它的所有行:
select
FilmOscarWins,
FilmName
From
tblFilm
Where FilmOscarWins = (
select
max(FilmOscarWins)
From
tblFilm
)
如果你想要获得奥斯卡奖最多的电影,那么使用select top
:
select top (1) f.*
From tblFilm f
order by FilmOscarWins desc;
在聚合查询中,select
列需要与 group by
列一致 -- select
中的未聚合列必须与 group by
匹配。
我理解为什么第一个查询需要 GROUP BY
,因为它不知道将总和应用于哪个日期,但我不明白为什么第二个查询会出现这种情况。最终作为最大金额的值已经包含在 table 中 - 它不像 SUM
那样计算。谢谢
-- First Query
select
sum(OrderSales),OrderDates
From Orders
-- Second Query
select
max(FilmOscarWins),FilmName
From tblFilm
需要 GROUP BY
的不是 SUM
和 MAX
,而是 未聚合的 列。
如果你只写这个,你会得到一行,用于整个 table 中 FilmOscarWins
列的最大值:
select
max(FilmOscarWins)
From
tblFilm
如果任何一部电影获得的奥斯卡奖最多是 12 座,那么这一行就是 12 座。但是可能有多部电影,所有这些都获得了 12 座奥斯卡奖,所以如果我们要求 FilmName
除了那 12 座, 没有单一的答案。
通过添加 Group By
,我们从根本上改变了查询:而不是 return 一个数字 整个 table,它将 return 每组 一行 - 在这种情况下,意味着每部电影一行。
如果你确实想获得所有获得最多 12 次奥斯卡奖的电影的列表,你必须做一些更复杂的事情,比如使用子查询首先找到那个数字 (12),然后找到匹配它的所有行:
select
FilmOscarWins,
FilmName
From
tblFilm
Where FilmOscarWins = (
select
max(FilmOscarWins)
From
tblFilm
)
如果你想要获得奥斯卡奖最多的电影,那么使用select top
:
select top (1) f.*
From tblFilm f
order by FilmOscarWins desc;
在聚合查询中,select
列需要与 group by
列一致 -- select
中的未聚合列必须与 group by
匹配。