为什么 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 的不是 SUMMAX,而是 未聚合的 列。

如果你只写这个,你会得到一行,用于整个 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 匹配。