[英]SQL query using stored procedure
I have a table in MySQL with three columns that need an average of each row of three columns using the stored procedure:我在 MySQL 中有一个表,其中三列需要使用存储过程的每行三列的平均值:
Id | One | Two | Three
----+-------+-------+-------
1 | 10 | 30 | 20
2 | 50 | 60 | 20
3 | 60 | 0 | 40
The average must be determined using a stored procedure, not a normal query.必须使用存储过程而不是普通查询来确定平均值。
I have this SQL query我有这个 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
I want that to look like this, with a MySQL query:我希望它看起来像这样,使用 MySQL 查询:
Id | Average
---+--------
1 | 20
2 | 43.3
3 | 50
Maybe not the best solution but you could use:也许不是最好的解决方案,但您可以使用:
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;
Result:
结果:
id average 1 20.0000 2 43.3333 3 50.0000 4 35.0000
This query excludes Null
and 0
values此查询不包括
Null
和0
值
Full Procedure完整程序
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.