Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 按类别对列进行SQL平均_Mysql_Sql - Fatal编程技术网

Mysql 按类别对列进行SQL平均

Mysql 按类别对列进行SQL平均,mysql,sql,Mysql,Sql,我试图得到一列的平均值,基于另一列。然后,我想创建一个新的列,其中每个类别的平均值。 我似乎无法理解这一点。谢谢你的帮助 这是我的桌子 | value | category | | 3 | a | | 4 | a | | 5 | a | | 2 | b | | 4 | b | | 3 | b | | 1

我试图得到一列的平均值,基于另一列。然后,我想创建一个新的列,其中每个类别的平均值。 我似乎无法理解这一点。谢谢你的帮助

这是我的桌子

| 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

谢谢。我有点困惑,因为我只有一张桌子。我已经为“类别平均值”创建了一个空白列,计算应该放在哪里。这可能吗?@bdkauff以及上面的例子;-)子查询引用与主查询相同的表,但别名是t2而不是t。结果将是准确的,但效率低下,因为每行表将计算一次子量。@JoeMurray。有了
类别的索引,value
,性能应该相当不错。谢谢!那么r是什么?很抱歉,我对sql不是很熟悉。@bdkauff r是select的别名,因此您可以在集合和位置中引用它