【发布时间】:2021-03-18 17:08:31
【问题描述】:
我创建了一个存储过程来填充日志表。我在使用列 H 和 I 的语法时遇到问题。我的语法与月度和年度平均值有关吗?我的问题似乎与那些代码行有关。
DELIMITER //
CREATE PROCEDURE populate()
BEGIN
DECLARE NoEmpvar INT;
DECLARE NoDeptvar INT;
DECLARE locregion1var INT;
DECLARE locregion2var INT;
DECLARE locregion3var INT;
DECLARE totalsalesvar DECIMAL(10,2);
DECLARE avgsalesvar DECIMAL(10,2);
DECLARE avgsalesmovar DECIMAL(10,2);
DECLARE avgsalesyrvar DECIMAL(10,2);
SELECT COUNT(*) INTO NoEmpvar FROM emp;
SELECT COUNT(*) INTO NoDeptvar FROM dept;
SELECT COUNT(*) INTO locregion1var FROM location WHERE regionid=1;
SELECT COUNT(*) INTO locregion2var FROM location WHERE regionid=2;
SELECT COUNT(*) INTO locregion3var FROM location WHERE regionid=3;
SELECT COUNT(*) INTO totalsalesvar FROM sales;
SELECT AVG(salesamt) INTO AvgSale FROM sales;
SELECT AVG(salesamt) INTO avgsalesmovar FROM sales WHERE month(salesdate);
SELECT AVG(salesamt) INTO avgsalesyrvar FROM sales WHERE year(salesdate);
INSERT INTO Log(NoEmp, NoDept, LocReg1, LocReg2, LocReg3, TotSales, AvgSale, AvgSaleMo, AvgSaleYr)
VALUES(NoEmpvar,NoDeptvar,locregion1var,locregion2var,locregion3var,totalsalesvar,avgsalesvar,avgsale smovar,avgsalesyrvar);
END //
【问题讨论】:
-
如果语法有问题,查询根本不会运行。他们正在执行。该表中是否有任何行的销售日期在当前月份和年份为
NOW()?如果没有匹配的行,则AVG()返回 NULL。试试SELECT COUNT(*) INTO @nowcount FROM sales WHERE month(salesdate)=month(NOW()) AND year(salesdate)=year(NOW());然后程序运行后,如果没有匹配的行,会话变量@nowcount将为0。 -
哦,我明白了。我在错误的上下文中使用了 NOW。我根本不需要那种说法。我的销售数据涵盖 2016 年和 2017 年,因此我需要获得这几个月的平均值。