按类别的SQL平均列
问题描述:
我想根据另一列获取列的平均值。然后,我想创建一个新的列,其平均值代表每个类别。 我似乎无法弄清楚这一点。谢谢你的帮助。按类别的SQL平均列
这里是我的表
| value | category |
| 3 | a |
| 4 | a |
| 5 | a |
| 2 | b |
| 4 | b |
| 3 | b |
| 1 | c |
| 7 | c |
这里就是我想要的:
| value | category | category avg |
| 3 | a | 4 |
| 4 | a | 4 |
| 5 | a | 4 |
| 2 | b | 3 |
| 4 | b | 3 |
| 3 | b | 3 |
| 1 | c | 4 |
| 7 | c | 4 |
答
这可以使用子查询呢,from
条款或select
条款要么英寸这里有一种方法:
select value, category,
(select avg(value) from table t2 where t.category = t2.category) as catgory_avg
from table t;
编辑:
如果你想更新在表中的值,那么你可以做:
update table t join
(select category, avg(value) as avgv
from table t
group by category
) tavg
on t.category = tavg.category
t.category_avg = tavg.avgv;
答
按您的评论,它看起来像你想要用平均值来更新表格。这可以通过更新来完成和选择,像这样
UPDATE table t,
( SELECT AVG(value) as avg_val, category
FROM table
GROUP BY category
) r
SET t.category_avg = r.avg_val
WHERE t.category = r.category
+0
谢谢!那么什么是r?对不起,我不熟悉sql。 – bdkauff 2014-11-06 23:20:27
+0
@bdkauff r是select的别名,所以你可以在SET和WHERE中引用它 – 2014-11-06 23:20:55
感谢。我有点困惑,因为我只有一张桌子。我已经创建了一个'Category Avg'的空白列,在那里进行计算。那可能吗? – bdkauff 2014-11-06 23:08:42
@bdkauff上面的例子也是如此;-) – Strawberry 2014-11-07 00:37:08
子查询引用与主查询相同的表,但将t2作为别名而不是t。结果将是准确的,但效率不高,因为子表将在每行计算一次。 – 2014-11-07 03:19:44