因此,我正在使用MySQL,編寫一個函數,用於平均表中的女性和男性的年齡並比較它們,並返回更大的結果。日期格式爲YYYY-MM-DD,我使用DATEDIFF()。該函數似乎正常工作,但是當我運行腳本時,我所得到的只是一個帶有空值的消息框,而不是它應該輸出的響應。SQL平均年齡比較函數返回null
USE tennis;
DROP PROCEDURE IF EXISTS AverAge;
DELIMITER //
CREATE PROCEDURE AverAge()
BEGIN
DECLARE averWomen DECIMAL(3,2);
DECLARE averMen DECIMAL(3,2);
SELECT AVG(DATEDIFF(BIRTH_DATE,CURDATE()))
INTO averWomen
FROM PLAYERS
WHERE sex = 'F';
SELECT AVG(DATEDIFF(BIRTH_DATE,CURDATE()))
INTO averWomen
FROM PLAYERS
WHERE sex = 'M';
IF averWomen > averMen THEN
SELECT CONCAT('The average age of women is higher. It is ', averWomen) AS message;
ELSEIF averMen > averWomen THEN
SELECT CONCAT('The average age of women is higher. It is ', averMen) AS message;
ELSE
SELECT CONCAT('The average age of men and women is equal. It is ', averWomen, ' for women and ', averMen, ' for men.') AS message;
END IF;
END//
DELIMITER ;
CALL AverAge();
有人可以發現我搞亂了嗎?
編輯
USE tennis;
DROP PROCEDURE IF EXISTS AverAge;
DELIMITER //
CREATE PROCEDURE AverAge()
BEGIN
DECLARE averWomen DECIMAL(10,6);
DECLARE averMen DECIMAL(10,6);
SELECT AVG(EXTRACT(year FROM CURDATE()) - EXTRACT(YEAR FROM BIRTH_DATE))
INTO averWomen
FROM PLAYERS
WHERE SEX = 'F';
SELECT AVG(EXTRACT(year FROM CURDATE()) - EXTRACT(year FROM BIRTH_DATE))
INTO averMen
FROM PLAYERS
WHERE SEX = 'M';
IF averWomen > averMen THEN
SELECT CONCAT('The average age of women is higher. It is ', averWomen) AS message;
ELSEIF averMen > averWomen THEN
SELECT CONCAT('The average age of women is higher. It is ', averMen) AS message;
ELSE
SELECT CONCAT('The average age of men and women is equal. It is ', averWomen, ' for women and ', averMen, ' for men.') AS message;
END IF;
END//
DELIMITER ;
CALL AverAge();
所以,這就是我所做的是作品。
嘎,我不能相信我錯過了那個。現在我只是因爲某種原因搞亂了平均值......雖然現在我沒有得到預期的結果,但至少它似乎正在適當地運行。 – Pstanton