繁体   English   中英

SQL 使用存储过程查询

[英]SQL query using stored procedure

我在 MySQL 中有一个表,其中三列需要使用存储过程的每行三列的平均值:

Id  |  One  |  Two  |  Three
----+-------+-------+-------
1   |  10   |  30   |  20
2   |  50   |  60   |  20
3   |  60   |  0    |  40

必须使用存储过程而不是普通查询来确定平均值。

我有这个 SQL 查询

select
    id, 
    (ifnull(one, 0) + ifnull(two, 0) + ifnull(three, 0)) /
        ((one is not null) + (two is not null) + (three is not null)) as average 
from table

我希望它看起来像这样,使用 MySQL 查询:

Id | Average
---+--------
1  | 20
2  | 43.3
3  | 50

也许不是最好的解决方案,但您可以使用:

select id, 
       SUM(coalesce(one,0)+coalesce(two,0)+coalesce(three,0)) /
       count(CASE WHEN one != 0 and one is not null  then 1 ELSE NULL END) 
       + count(CASE WHEN two != 0 and two is not null  then 1 ELSE NULL END) 
       + count(CASE WHEN three  != 0 and three is not null  then 1 ELSE NULL END )  as average 

from my_table
group by id;

结果:

 id average 1 20.0000 2 43.3333 3 50.0000 4 35.0000

演示

此查询不包括Null0

合并

完整程序

DELIMITER//
CREATE PROCEDURE average()
BEGIN 

    select id, SUM(coalesce(one,0)+coalesce(two,0)+coalesce(three,0)) /(count(CASE WHEN one != 0 and one is not null  then 1 ELSE NULL END) + count(CASE WHEN two != 0 and two is not null  then 1 ELSE NULL END) + count(CASE WHEN three  != 0 and three is not null  then 1 ELSE NULL END))  as average from my_table group by id ;

END
DELIMITER ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM