我的数据库中存在以下情况:
id: | second id: | value
Row 1: 1 | 1 | 123
Row 2: 1 | 2 | 234
Row 3: 1 | 3 | 456
Row 4: 2 | 1 | 987
Row 5: 2 | 2 | 876
Row 6: 2 | 3 | 765
Row 7: 3 | 1 | 345
Row 8: 3 | 2 | 678
Row 9: 3 | 3 | 543
Row 10: 4 | 1 | 345
...
对于每个id,我有3个秒ID,它们总是1,2和3。 我需要做的是获得这3个值的平均值(考虑id的3个值)并得到它们的平均值。我需要用一个长表(我想知道创建一个特定的视图来做这个)。
欢迎任何帮助。
(对不起,我的问题,但我真的很想在SQL Server上)
答案 0 :(得分:4)
只需使用AVG并按每个ID分组。
SELECT id, AVG(value)
FROM MyTable
GROUP BY id
答案 1 :(得分:1)
如果您没有任何窗口功能,自加入也应该有效:
select id, second_id, value, avg_val_over_id
from(
select id, second_id, value
from table
)a
join(
select id, avg(value) as avg_val_over_id
from table
group by id
)b
using(id);
答案 2 :(得分:0)
编辑:
根据您的评论,请尝试:
SELECT id, AVG(value)
FROM MyTable
GROUP BY id
答案 3 :(得分:0)
我不确定我是否理解你所追求的是什么,但是如果你想要每个second_id
的平均值,请尝试:
SELECT second_id, AVG(value)
FROM table
GROUP BY second_id
答案 4 :(得分:0)
如果您想要准确,请使用
SELECT second_id, AVG(value*1) FROM table GROUP BY second_id
答案 5 :(得分:0)
如果你想在你的输出中添加这些平均行,这样的东西可能会起作用(这里,我正在内联创建样本数据,并将其别名为T - 它可以轻松地从表中选择基本数据代替):
select ID,COALESCE(CONVERT(varchar(10),subid),'avg'),AVG(val) from (
select 1 as id,1 as subid,123 as val union all
select 1,2,234 union all
select 1,3,456 union all
select 2,1,987 union all
select 2,2,876 union all
select 2,3,745
) t
group by ID,subid with rollup
having ID is not null
结果:
1 1 123
1 2 234
1 3 456
1 avg 271
2 1 987
2 2 876
2 3 745
2 avg 869