带有HAVING子句的Sql COUNT产生错误结果

时间:2017-04-16 01:46:23

标签: php mysql sql

在我的mysql数据库中记录

id  camper_id   reg_date
1   3           2017-04-17 00:00:00
2   3           2017-04-18 00:00:00
3   4           2017-04-15 00:00:00
4   4           2017-04-13 00:00:00

SELECT COUNT(*),camper_id,reg_date FROM tbl_registration GROUP BY camper_id HAVING reg_date >= CURDATE()

我们今天说或CURDATE是2017-04-15 00:00:00

我得到了错误的结果这是我运行查询时得到的结果

COUNT(*)    campr_id    reg_date
2           3           2017-04-15 00:00:00
2           4           2017-04-18 00:00:00

我应该来......

COUNT(*)    camper_id   reg_date
2           3           2017-04-15 00:00:00
1           4           2017-04-18 00:00:00

我的查询有什么问题?

2 个答案:

答案 0 :(得分:1)

这是您的查询:

SELECT COUNT(*), camper_id, reg_date
FROM tbl_registration
GROUP BY camper_id
HAVING reg_date >= CURDATE();

HAVING之后 {/ 1>}。但您尚未在GROUP BY中指定reg_date。因此,你应该有一个聚合函数。

我认为你真的想要一个GROUP BY条款:

WHERE

MySQL允许您在聚合中拥有此类“裸”列。但是,这是一个非常糟糕的做法。我认为最新版本的MySQL已将默认行为更改为不允许此构造 - 更符合ANSI SQL以及其他数据库的工作方式。

答案 1 :(得分:0)

请尝试以下方法......

SELECT COUNT(*),
       camper_id,
       reg_date
FROM tbl_registration
WHERE DATEDIFF( reg_date,
                CURDATE() ) >= 0
GROUP BY camper_id;

请在SQL - having VS where阅读dasblinkenlight的回答,以便对WITHHAVING之间的区别进行精彩讨论。

如果您有任何问题或意见,请随时发表评论。