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

标签 mysql database group-by

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

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

错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '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 与 HAVING 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34193515/

相关文章:

MySQL Group By - 获取与 max() 金额关联的行

php - 如何使用组函数显示 COUNT 查询

python - 如何存储抓包数据(*.pcap)以供分析

sql - 将第 1 列中的子字符串中的文本替换为第 2 列中的字符串

sql - 具有 GROUP BY 和聚合函数的多个 INNER JOIN

python - Pandas 分组并按计数过滤

mysql - FIND_IN_SET 具有限制偏移量

mysql - 基于第二个表 ID 从第三个表字段返回值

mysql - 如果是子集的一部分,排除所有结果的最佳方法?

java - JSP 中的变量没有增加