在以下程序中,
当我使用WHERE语句时它给出了错误([Err] 1111 - 组函数的无效使用)并且当我使用HAVING语句时它在'having子句'中给出了另一个错误([Err] 1054 - 未知列'roomid')而不是WHERE,虽然我在表中定义了宽限期列。
有没有人知道如何解决这个问题?当我在另一个mySQL版本下尝试时,代码运行得很完美。
DELIMITER //
DROP PROCEDURE IF EXISTS `findAVG`//
CREATE DEFINER=`kamer`@`%` PROCEDURE `findAVG`(IN rid INT, startDate DATETIME, OUT Score DOUBLE)
BEGIN
DECLARE finishDate DATETIME;
DECLARE DateIterator DATETIME;
DECLARE avgPrice DOUBLE;
SET avgPrice = 0;
SET Score = 0;
SELECT price into Score
FROM bookings
WHERE roomid = rid
ORDER BY ABS( DATEDIFF( bookings.date, startDate)) LIMIT 1;
IF (Score = 0) THEN
SET DateIterator = startDate;
SET finishDATE = DATE_ADD(startDate, INTERVAL 30 DAY);
WHILE DateIterator <= finishDate DO
SELECT price
INTO avgPrice
FROM prices
WHERE roomid = rid
AND date = DateIterator
ORDER BY DATEDIFF(startDate, prices.timestamp) LIMIT 1;
SET DateIterator = DATE_ADD(DateIterator, INTERVAL 1 DAY);
END WHILE;
SET Score = AVG(avgPrice);
END IF;
UPDATE bookings SET price=Score WHERE roomid= rid AND date=startDate;
END
答案 0 :(得分:1)
“无效使用组函数”意味着您已经在group by group子句中使用了一个未出现在select子句或反向中的列。
即。 :
SELECT A,B,C,COUNT(*) FROM mytable GROUP BY A,B,C
分组在3个列上完成,计数在A,B和C相似的每一行上完成。
例如,如果您尝试传递“GROUP BY A,B”SQL不知道如何处理C列...
对于HAVING问题,我觉得在选择完成后应用了HAVING子句。 因此,如果您使用的列未出现在SELECT子句中,则会引发错误。