无法理解如何使mysql显示存储过程的结果。调用过程时不能使用table_name.column_name。因此,这个过程不知道它应该调用模式中的哪个表?
试图在名为package的表中获取名为cateringID的数值列的平均值。这个表有几行NULL值。需要把这作为一个程序来做。首先,将cateringID字段中的所有NULLs值转换为过程中0.0的数值。然后在这个过程中取这个字段的平均值。然后试着给手术打电话。但是当试图提取存储过程中的cateringID字段的平均值时,获取NULL值吗?
DELIMITER //
CREATE PROCEDURE average_numeric_nulls(IN pPackageID INT, IN pCateringID DEC)
BEGIN
DECLARE pCateringID DECIMAL(5,4);
DECLARE catID DECIMAL(5,4);
SELECT IF(pCateringID IS NULL, 0.0000, FORMAT(pCateringID, 4))
INTO catID
FROM package
WHERE packageID = pPackageID;
SELECT(AVG(catID)) AS 'Replaced NULLS' FROM package;
END//
DELIMITER ;
CALL average_numeric_nulls(@packageID, @cateringID); pPackageID和pCateringID参数表示现有包表中的前两个字段。即。
pPackageID = packageID包表中的PK。packageID是一个数字整数
pCateringID = cateringID包表中的FK。cateringID是数字整数和NULL的混合。需要取该列的平均值,但必须先用0.0替换NULL。
因此,这个过程应该从package表中读取packageID的值,将这个packageID值传递给过程中的pPackageID变量,然后用值0.0000替换所有的pCateringID值(如果它们是NULL)。因此,可以获取package表中结果cateringID列的平均值。
示例包表
packageID cateringID packageName
001空A
002空B
003 001 C
004 002 D
005 003英
结果输出:
替换NULLS
空
发布于 2021-12-24 05:50:58
因此该过程应该从package表读取packageID的值,将这个packageID值传递给过程中的pPackageID变量,然后用值0.0000替换所有的pCateringID值(如果它们是NULL)。因此,可以获取package表中结果cateringID列的平均值。
这可以通过一个查询来执行:
SELECT FORMAT(AVG(COALESCE(cateringID, 0)), 4) AS avg_cateringID
FROM package
-- WHERE ...;如果您需要得到一些确定的行集的平均值,然后根据位置添加。
如果你需要用SP表格来做
CREATE PROCEDURE average_numeric_nulls(IN pPackageID INT, IN pCateringID DEC)
SELECT FORMAT(AVG(COALESCE(cateringID, 0)), 4) AS avg_cateringID
FROM package
-- WHERE ...;在WHERE子句中使用SP参数(如果不需要,则删除它们)。
https://stackoverflow.com/questions/70467842
复制相似问题