SQL按类别平均列

时间:2014-11-06 22:45:43

标签: mysql 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      |   

2 个答案:

答案 0 :(得分:1)

您可以使用子查询在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;

答案 1 :(得分:0)

根据您的评论,您似乎想要使用值的平均值更新表格。这可以通过更新和类似的选择来完成

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

FIDDLE DEMO