存储过程何时或有效不起作用

时间:2013-12-29 18:18:15

标签: mysql sql stored-procedures having-clause

在以下程序中,

当我使用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

1 个答案:

答案 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子句中,则会引发错误。