我有以下表格,
ID | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 |
----------------------------------------------
1 | 0 | 0 | 90 | 90 | 100 | 100 |
2 | NULL | 130 | 100 | 70 | 0 | 0 |
我需要将历史记录的平均值计算到新表中。
例如,对于2009年的ID#1,我想计算0/1 = 0并在新表中插入[2009],在2010年,我想计算(0 + 0)/ 2 = 0并在新表中插入[2010]。对于2011年,我想计算(0 + 0 + 90)/ 3 = 30并在新表中插入[2011],依此类推。
对于ID#2,由于[2009]中的值为' NULL',我必须忽略该值。因此,我想保持' NULL'在新表中的[2009]中,并在新表中的[2010]中计算(130)/ 1 = 130。对于2011年,我想计算(130 + 100)/ 2 = 115并在新表中插入[2011]。有没有办法可以(在过去的时间内总结非NULL值)/非空的#?
谢谢!
答案 0 :(得分:0)
这样的事情应该有所帮助
CREATE temporary TABLE IF NOT EXISTS mean_temp AS
(SELECT *
FROM (SELECT id, 2009 AS years, [2009] AS valu
FROM yourtable
UNION ALL
SELECT id, 2010, [2010]
FROM yourtable
UNION ALL
SELECT id, 2011, [2011]
FROM yourtable
UNION ALL
SELECT id, 2012, [2012]
FROM yourtable
UNION ALL
SELECT id, 2013, [2013]
FROM yourtable
UNION ALL
SELECT id, 2014, [2014]
FROM yourtable)A)
SELECT id,years,
(SELECT Sum(valu)
FROM mean_temp b
WHERE a.id = b.id
AND a.years >= b.years) / (SELECT Count(valu)
FROM mean_temp c
WHERE a.id = c.id
AND a.years >= c.years)
FROM mean_temp a
ORDER BY id,
years
Count
汇总不会计算NULL
值,因此仅对除法not null
值进行计算