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
| 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)为真。