记录在我的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
我的查询有什么问题?
最佳答案
这是您的查询:
SELECT COUNT(*), camper_id, reg_date
FROM tbl_registration
GROUP BY camper_id
HAVING reg_date >= CURDATE();
HAVING
是在 GROUP BY
之后处理的。但您尚未在GROUP BY
中指定reg_date
。因此,您应该有一个围绕它的聚合函数。
我认为你真的想要一个 WHERE
子句:
SELECT COUNT(*), camper_id, MIN(reg_date) as reg_date
FROM tbl_registration
WHERE reg_date >= CURDATE()
GROUP BY camper_id;
MySQL 允许您在聚合中拥有此类“裸”列。然而,这是一个非常糟糕的做法。我认为 MySQL 的最新版本已经更改了默认行为,不允许这种构造——更好地符合 ANSI SQL 以及其他数据库的工作方式。
关于php - 带有 HAVING 子句的 Sql COUNT 产生错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43432917/