繁体   English   中英

如何将 GROUP BY 与 HAVING 一起使用?

[英]How to use GROUP BY together with HAVING?

我试图从我的数据库中选择所有访问过我网站的 ip,从本月开始,至少相隔一天,但我的 sql 查询显示错误。 我究竟做错了什么?

SELECT ip,COUNT(ip) AS matches
FROM ipAll
WHERE DATE LIKE  '%-12-%'
HAVING matches > '1'
GROUP BY ip

错误:

您的 SQL 语法有错误; 检查与您的 MySQL 服务器版本相对应的手册,了解在“GROUP BY ip”附近使用的正确语法

HAVINGGROUP BY

SELECT ip, COUNT(ip) AS matches
FROM ipAll
WHERE DATE LIKE  '%-12-%'
GROUP BY ip
HAVING matches > 1;

但是,您应该更像这样编写查询:

SELECT ip, COUNT(ip) AS matches
FROM ipAll
WHERE MONTH(DATE) = 12
GROUP BY ip
HAVING matches > 1;

不要在日期上使用LIKE ,因为使用本地国际化设置将日期转换为字符串(隐式)。 这些可能会改变并破坏代码。 另外,不要在需要数字的地方使用字符串常量。

错误是因为根据 mysql 文档有子句必须在 group by 子句之后而不是之前。

所以你的查询必须是这样的

SELECT ip,COUNT(ip) AS matches FROM ipAll WHERE DATE LIKE  '%-12-%' GROUP BY ip HAVING matches > '1'
SELECT ip, COUNT(ip) AS matches
FROM ipAll
WHERE DATE LIKE  '%-12-%'
GROUP BY ip
HAVING matches > 1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM