我理解为什么第一个查询需要一个GROUP BY
,因为它不知道将求和应用于哪个日期,但我不理解为什么第二个查询是这种情况。最终的最大值已经包含在表中-它不像SUM
那样计算。谢谢你
-- First Query
select
sum(OrderSales),OrderDates
From Orders
-- Second Query
select
max(FilmOscarWins),FilmName
From tblFilm
不是SUM
和MAX
需要GROUP BY
,而是未聚合的列。
如果您只是这样写,您将得到一行,对于整个表的FilmOscarWins
列的最大值:
select
max(FilmOscarWins)
From
tblFilm
如果获得奥斯卡奖最多的电影是12部,那一行会写12部。但是可能有多部电影,它们都获得了12项奥斯卡奖,所以如果我们问FilmName
和这12项,没有单一的答案。
Group By
,我们从根本上改变了查询:它不是为整个表返回一个数字,而是为每个组返回一行——在这种情况下,意味着每部电影返回一行。
如果你想要得到获得最多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
匹配。