首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL WorkBench存储过程问题

MySQL WorkBench存储过程问题
EN

Stack Overflow用户
提问于 2021-12-23 22:05:05
回答 1查看 59关注 0票数 0

无法理解如何使mysql显示存储过程的结果。调用过程时不能使用table_name.column_name。因此,这个过程不知道它应该调用模式中的哪个表?

试图在名为package的表中获取名为cateringID的数值列的平均值。这个表有几行NULL值。需要把这作为一个程序来做。首先,将cateringID字段中的所有NULLs值转换为过程中0.0的数值。然后在这个过程中取这个字段的平均值。然后试着给手术打电话。但是当试图提取存储过程中的cateringID字段的平均值时,获取NULL值吗?

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2021-12-24 05:50:58

因此该过程应该从package表读取packageID的值,将这个packageID值传递给过程中的pPackageID变量,然后用值0.0000替换所有的pCateringID值(如果它们是NULL)。因此,可以获取package表中结果cateringID列的平均值。

这可以通过一个查询来执行:

代码语言:javascript
复制
SELECT FORMAT(AVG(COALESCE(cateringID, 0)), 4) AS avg_cateringID
FROM package
-- WHERE ...;

如果您需要得到一些确定的行集的平均值,然后根据位置添加。

如果你需要用SP表格来做

代码语言:javascript
复制
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参数(如果不需要,则删除它们)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70467842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档