SQL 使用存储过程查询
SQL query using stored procedure
我在 MySQL 中有一个 table 三列,需要使用存储过程计算三列的每一行的平均值:
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;
Result:
id average
1 20.0000
2 43.3333
3 50.0000
4 35.0000
此查询排除 Null
和 0
值
完整程序
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 ;
我在 MySQL 中有一个 table 三列,需要使用存储过程计算三列的每一行的平均值:
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;
Result:
id average 1 20.0000 2 43.3333 3 50.0000 4 35.0000
此查询排除 Null
和 0
值
完整程序
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 ;