使用Mysql存储过程进行第一步。我有以下声明,但是当我运行它时,我收到错误:Error Code: 1111. Invalid use of group function
但我没有使用GROUP BY
或聚合在任何地方,是吗?
delimiter //
DROP PROCEDURE IF EXISTS myDB.FiscalYearCleanup//
CREATE PROCEDURE myDB.FiscalYearCleanup
(IN year INT)
BEGIN
--
-- Fiscal Years "end" in the named year
-- So, FY2000 starts on July 1, 1999 and ends on June 30, 2000
--
-- Only use years that exist in the current pool of events
--
DECLARE testYear INT DEFAULT 0;
SELECT
year
FROM
myDB.eventLog
WHERE
year BETWEEN YEAR(MIN(date)) AND YEAR(MAX(date))
INTO testYear;
IF testYear = year THEN
SELECT CONCAT('Year is in range: ', year) AS message;
ELSE
SELECT CONCAT('Year is out of range: ', year) AS message;
END IF;
END//
答案 0 :(得分:1)
您确实在使用聚合:MIN
中的MAX
和year BETWEEN YEAR(MIN(date)) AND YEAR(MAX(date))
。
对存储过程的修复非常简单:将查询中的WHERE
更改为HAVING
。
在聚合发生之前应用WHERE
子句中的条件。聚合后应用HAVING
子句中的条件。