在MySQL中没有分组依据

问题描述

我已经阅读了多篇文章,现在我对以下2条陈述感到困惑。

  1. 如果我们使用不带分组的表,那么整个表将作为“单个分组”。
  2. 如果我们使用不带分组的话,那么每个表都将作为一个单独的分组。

MysqL中哪个是正确的? 例如,我有一个名为ABC的表,如下所示:

@H_404_10@| Wage | _____________ | 4 | | 8 | | 28 | | 90 |

如果我们使用以下查询

@H_404_10@select wage from ABC having wage > 1

然后将打印所有记录。因此,每一行都作为单个群体。

但是如果我们使用:

@H_404_10@select wage from ABC having wage = max(wage)

没有记录被打印。因此,整个表可以作为一个组工作。

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

解决方法

没有having的情况下请勿使用group by。尽管MySQL支持该功能,但这不是有效的标准SQL,并且您得到的行为很可能违反直觉。

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

select wage from abc where wage > 1

第一个查询毫无意义:您在wage子句中同时拥有汇总的having和未汇总的select wage from abc order by wage desc limit 1 。如果您想要具有最高工资的行,则可以按以下限制进行订购:

select *
from abc a
where wage = (select max(a1.wage) from abc)

或者,如果您想允许联系,请使用相关的子查询:

var deleteTag = '<custom-tag>.*?<\/custom-tag>';
string= string.replace(new RegExp(deleteTag,'g'),'');