【发布时间】:2011-02-04 23:11:06
【问题描述】:
我正在尝试计算日期尚未过去的行数,因此我只能获取当前记录
我收到一个错误提示
MySQL 错误 #111 组函数使用无效
SELECT COUNT(festivalid) FROM festivals WHERE min(datefrom) > now()
【问题讨论】:
标签: sql mysql mysql-error-1111
我正在尝试计算日期尚未过去的行数,因此我只能获取当前记录
我收到一个错误提示
MySQL 错误 #111 组函数使用无效
SELECT COUNT(festivalid) FROM festivals WHERE min(datefrom) > now()
【问题讨论】:
标签: sql mysql mysql-error-1111
SELECT COUNT(festivalid)
FROM festivals
WHERE datefrom > now()
不要使用 min 函数。这会选择不是您要查找的最短日期。
min函数一般使用如下
SELECT MIN(dateFrom) FROM festivals
【讨论】:
不要使用 MIN...
SELECT COUNT(festivalid) FROM festivals WHERE datefrom > now()
【讨论】:
错误的原因是您不能在WHERE 子句中使用聚合(即:MIN、MAX、COUNT...)函数——只有在HAVING 子句中才能这样做。要定义 HAVING 子句,您的查询需要定义 GROUP BY 子句:
SELECT COUNT(f.festivalid)
FROM FESTIVALS f
GROUP BY ? --festivalid would NOT be an ideal choice
HAVING MIN(datefrom) > now()
...但我对查询有疑问,并认为使用它会更好:
SELECT COUNT(f.festivalid)
FROM FESTIVALS f
WHERE f.datefrom > CURRENT_TIMESTAMP
CURRENT_TIMESTAMP 是 ANSI 标准,等同于 MySQL 特定的NOW(),使查询可移植到其他数据库。
【讨论】: