如何在mysql中添加带有Average的Column的值

时间:2015-11-17 21:52:51

标签: mysql sql

这是我的表数据 表名是Obat

+---------+---------+----------------+-------+ 
| merek   | formula | nm_obat        | harga | 
+---------+---------+----------------+-------+
| am001   | 1x1     | Antimo         |  3500 | 
| gp002   | 1x1     | Glimipirid     | 20000 | 
| if001   | 1x1     | Inzaflu        |  4500 | 
| mf500   | 3x1     | Metformin500mg | 10000 | 
| mixg001 | 1x1     | Mixagrip       |  5000 | 
+---------+---------+----------------+-------+

如何将Harga列中的值与Harga的平均值相加?

这就是我一直在尝试的:

UPDATE obat SET  
harga = harga + (select avg(harga) from obat);

1 个答案:

答案 0 :(得分:0)

创建仅包含平均值的数据集。然后将其交叉连接到基本集,允许您将两个值一起添加。由于数据表中的1 *#记录将等于数据表中的相同记录,因此您将获得相同的行数。

此方法选择平均一次。您可以通过将其移动到选择中来每次运行此选择,但这通常较慢..

最佳方法IMO。 (在我看来)

SELECT A.merek, A.formula, A.nm_obat, A.harga, harga+B.mAvg  as newCol
FROM DataTable A
CROSS JOIN (SELECT avg(harga) mAvg FROM dataTable) B

替代方法但速度要慢得多。

SELECT A.merek
     , A.formula
     , A.nm_obat
     , A.harga
     , harga+(SELECT avg(harga) mAvg 
              FROM dataTable)  as newCol
FROM DataTable A

更新它应该是这么简单: (其他例子)mysql update column with value from another table

update obat A
cross join (select avg(harga) mavg from obat) b
Set A.harga = A.Harga+B.Mavg;