为什么 MAX 语句需要 Group By?

ah2*_*ise 0 sql sql-server group-by max

我理解为什么第一个查询需要 a GROUP BY,因为它不知道将总和应用到哪个日期,但我不明白为什么第二个查询会出现这种情况。最终最大金额的值已包含在表中 - 它不是按原样计算的SUM。谢谢

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


-- Second Query
select
    max(FilmOscarWins),FilmName
From tblFilm
Run Code Online (Sandbox Code Playgroud)

IMS*_*SoP 5

它不是SUMMAX需要GROUP BY,而是未聚合的列。

如果你只写这个,你将得到一行,作为FilmOscarWins整个表中列的最大值:

        select
            max(FilmOscarWins)
        From
            tblFilm

Run Code Online (Sandbox Code Playgroud)

如果任何一部电影获得最多的奥斯卡奖是 12 项,那么这一行会显示 12 项。但是可能有多部影片,所有影片都获得了 12 项奥斯卡奖,因此,如果我们要求获得FilmName12 项奥斯卡奖,那么就没有单一的答案。

通过添加Group By,我们从根本上改变了查询:它将为每个组返回一行,而不是为整个表返回一个数字- 在本例中,这意味着每部电影一行。

如果您确实想获得获得最多 12 项奥斯卡奖的所有电影的列表,则必须执行更复杂的操作,例如使用子查询首先查找单个数字 (12),然后查找所有匹配的行它:

select
     FilmOscarWins,
     FilmName
From
     tblFilm
Where FilmOscarWins = (
        select
            max(FilmOscarWins)
        From
            tblFilm
)    
Run Code Online (Sandbox Code Playgroud)