在 MySQL 中没有分组依据
Having Without Group By in MySQL
我已经阅读了多篇文章,现在我对以下 2 个陈述感到困惑。
- 如果我们在没有分组的情况下使用 having,则整个 table 充当单个组。
- 如果我们在没有分组的情况下使用 having,则每个 table 充当一个单独的组。
MySQL 中哪个是正确的?
例如,我有一个名为 ABC 的 table 如下:
| Wage |
_____________
| 4 |
| 8 |
| 28 |
| 90 |
如果我们使用以下查询
select wage
from ABC
having wage > 1
然后打印所有记录。所以每一行都是独立的组。
但是如果我们使用:
select wage
from ABC
having wage = max(wage)
没有打印记录。所以整个 table 作为一个团队工作。
那么哪一个是正确的以及为什么这 2 个查询显示不同的结果。
不要在没有 group by
的情况下使用 having
。尽管 MySQL 支持,但这不是有效的标准 SQL,您得到的行为很可能是 counter-intuitive.
第一个查询应该只是一个 where
子句:
select wage from abc where wage > 1
第二个查询毫无意义:您在 having
子句中同时具有聚合和 non-aggregated wage
。如果你想要工资最高的行,那么你可以排序和限制:
select wage
from abc
order by wage desc limit 1
或者如果你想允许联系,使用相关子查询:
select *
from abc a
where wage = (select max(a1.wage) from abc)
我已经阅读了多篇文章,现在我对以下 2 个陈述感到困惑。
- 如果我们在没有分组的情况下使用 having,则整个 table 充当单个组。
- 如果我们在没有分组的情况下使用 having,则每个 table 充当一个单独的组。
MySQL 中哪个是正确的? 例如,我有一个名为 ABC 的 table 如下:
| Wage |
_____________
| 4 |
| 8 |
| 28 |
| 90 |
如果我们使用以下查询
select wage
from ABC
having wage > 1
然后打印所有记录。所以每一行都是独立的组。
但是如果我们使用:
select wage
from ABC
having wage = max(wage)
没有打印记录。所以整个 table 作为一个团队工作。
那么哪一个是正确的以及为什么这 2 个查询显示不同的结果。
不要在没有 group by
的情况下使用 having
。尽管 MySQL 支持,但这不是有效的标准 SQL,您得到的行为很可能是 counter-intuitive.
第一个查询应该只是一个 where
子句:
select wage from abc where wage > 1
第二个查询毫无意义:您在 having
子句中同时具有聚合和 non-aggregated wage
。如果你想要工资最高的行,那么你可以排序和限制:
select wage
from abc
order by wage desc limit 1
或者如果你想允许联系,使用相关子查询:
select *
from abc a
where wage = (select max(a1.wage) from abc)