gpt4 book ai didi

mysql - COUNT(*) 不与 group by 一起工作?

转载 作者:太空宇宙 更新时间:2023-11-03 12:05:47 27 4
gpt4 key购买 nike

为什么以下查询在空数据库的 MySQL 5.6 中返回 NO RESULT?

SELECT COUNT(*) 
FROM a_sec_banns
WHERE ip = 'not-exist-ip'
GROUP BY ip
HAVING max(date_created) <= '10-10-2014' or count(*) > 3;

表的结构是这样的:

CREATE TABLE `a_sec_banns` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`DATE_CREATED` datetime DEFAULT NULL,
`IP` varchar(60) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

我希望查询 COUNT(*) 将返回一个数字 > 0,如果没有返回 0,如果查询错误则异常。但绝不为 NULL - COUNT 的 NULL/NO 结果目的是什么???

最佳答案

这是查询:

SELECT COUNT(*) 
FROM a_sec_banns
WHERE ip = 'not-exist-ip'
GROUP BY ip
HAVING max(date_created) <= '10-10-2014' or count(*) > 3;

如果您只在空数据库上运行第一部分:

SELECT COUNT(*) 
FROM a_sec_banns
WHERE ip = 'not-exist-ip'
GROUP BY ip ;

您将获得值为 0 的一行。

但是,having 子句会过滤掉这一行。 max(date_created) 将为 NULLcount(*) 将为 0,因此这两个条件都会失败。

顺便说一句,您应该使用 ISO 标准日期格式。因此,having 子句应为:

HAVING max(date_created) <= '2014-10-10' or count(*) > 3;

当表确实有数据时,这会有所帮助。

编辑:这是 count() 范围的问题,是计算什么的问题。使用聚合数据集(GROUP BY ..)时,计算聚合内的计数 - 在您的情况下没有聚合,因此没有计数结果。在简单的 select..where.. 上使用 count() 时,它会计算整个查询的结果,因此即使是空结果集也会被计为 0

关于mysql - COUNT(*) 不与 group by 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26671483/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com