Mysql 如何使用分组与有?

Mysql 如何使用分组与有?,mysql,database,group-by,Mysql,Database,Group By,我正在尝试从数据库中选择所有访问过我的网站的IP,从本月开始至少隔一天访问过一次,但我的sql查询显示错误。我做错了什么 SELECT ip,COUNT(ip) AS matches FROM ipAll WHERE DATE LIKE '%-12-%' HAVING matches > '1' GROUP BY ip 错误: 您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用near“GROUP BY ip”的正确语法 在以下小组之后: 但是,您应该更像这样编写

我正在尝试从数据库中选择所有访问过我的网站的IP,从本月开始至少隔一天访问过一次,但我的sql查询显示错误。我做错了什么

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

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

在以下小组之后:

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

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

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

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

因此,您的查询必须如下所示

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

日期实际上是一列name@frosty . . . 我没有领会你评论的要点。MySQL允许日期作为列名。我可能不赞成它,因为它也是一个类型和一个函数名,所以我认为应该保留它,但它是允许的。如果日期存储为字符串,则需要学习更好的命名约定。它应该存储为日期,或者称为datestr之类的东西。我想我只是感到困惑,但我想我现在明白了,在重新阅读了你的解释之后。
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;