MySQL中有无分组

MySQL中有无分组,mysql,group-by,max,greatest-n-per-group,having-clause,Mysql,Group By,Max,Greatest N Per Group,Having Clause,我读过多篇文章,现在我对以下两种说法感到困惑 如果我们使用“有无组”,则整个表作为单个组 如果我们使用“有无组”,则每个表都作为一个单独的组 MySQL中哪一个是正确的? 例如,我有一个名为ABC的表,如下所示: | Wage | _____________ | 4 | | 8 | | 28 | | 90 | 如果我们使用下面的查询 select wage from ABC having wage > 1

我读过多篇文章,现在我对以下两种说法感到困惑

  • 如果我们使用“有无组”,则整个表作为单个组
  • 如果我们使用“有无组”,则每个表都作为一个单独的组
  • MySQL中哪一个是正确的? 例如,我有一个名为ABC的表,如下所示:

    |   Wage    | 
    _____________
    |    4      | 
    |    8      | 
    |    28     | 
    |    90     |
    
    如果我们使用下面的查询

    select wage 
    from ABC
    having wage > 1
    
    然后所有的记录都被打印出来。因此,每一行都作为单独的组工作

    但如果我们使用:

    select wage
    from ABC
    having wage = max(wage)
    
    没有任何记录可以打印出来。所以整张桌子作为一个整体工作


    那么,哪一个是正确的,以及为什么这两个查询显示不同的结果。

    不要使用
    having
    而不使用
    groupby
    。尽管MySQL支持这一点,但这不是有效的标准SQL,而且您得到的行为很可能是违反直觉的

    第一个查询应该只是一个
    where
    子句:

    select wage from abc where wage > 1
    
    第一个查询毫无意义:在
    having
    子句中既有聚合的
    wage
    ,也有非聚合的
    wage
    。如果您想要具有最高工资的行,则可以按和限制订购:

    select wage
    from abc
    order by wage desc limit 1
    
    或者,如果要允许关联,请使用相关子查询:

    select *
    from abc a
    where wage = (select max(a1.wage) from abc)
    
    MySQL中哪一个是正确的?二者都或者没有。在每种特定情况下,这些陈述的真实性与子句的存在无关。如果使用了任何聚合函数,则(1)为真,否则(2)为真。