为什么MAX语句需要Group By?



我理解为什么第一个查询需要一个GROUP BY,因为它不知道将求和应用于哪个日期,但我不理解为什么第二个查询是这种情况。最终的最大值已经包含在表中-它不像SUM那样计算。谢谢你

-- First Query
select
sum(OrderSales),OrderDates
From Orders

-- Second Query
select
max(FilmOscarWins),FilmName
From tblFilm

不是SUMMAX需要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匹配。

相关内容

  • 没有找到相关文章

最新更新