Mysql
使用 MySQL/mariaDB 中另一個表的總和值更新表
我試圖使用下面的查詢通過在修改
ORDERS
表時使O_TOTALPRICE
列保持最新來更新表LINEITEM
。我使用的是標準的 TPC-H 數據庫。UPDATE ORDERS O, LINEITEM L SET O.O_TOTALPRICE = SUM(L.L_EXTENDEDPRICE * (1 - L.L_DISCOUNT/100) * (1 + L.L_TAX/100)) WHERE L.L_ORDERKEY = O.O_ORDERKEY;
但是,這會導致
1111 - Invalid use of group function
.操作是這樣的:
-----------------LINEITEM---------------- ---------ORDERS--------- L_ORDERKEY L_EXTPRICE L_DISCOUNT L_TAX O_ORDERKEY O_TOTALPRICE ========== ========== ========== ===== ========== ============ 1 12.99 20 8.5 ┬ 1 <TO CALC> 1 8.99 30 11 ┘ 2 99.99 10 10 ┬ 2 <TO CALC> 2 49.99 0 8.5 ┤ 2 3.99 50 14.7 ┘
LINEITEM
由於 中的記錄對應的有多行ORDERS
,所以我嘗試添加GROUP BY L.L_ORDERKEY
,但這只是語法錯誤。這可以在
UPDATE
語句中完成,還是必須拆分為多個語句?謝謝!!
假設:
L.L_EXTENDEDPRICE
應該L.L_EXTPRICE
L_DISCOUNT
和L_TAX
是百分比,在這種情況下,儲存的值LINEITEM
需要先除以 100.0,然後再進行計算一些樣本數據:
drop table if exists LINEITEM; drop table if exists ORDERS; create table ORDERS (O_ORDERKEY int ,O_TOTALPRICE decimal(10,2)); insert into ORDERS values (1,0.0), (2,0.0); create table LINEITEM (L_ORDERKEY int ,L_EXTPRICE decimal(10,2) ,L_DISCOUNT decimal(10,2) ,L_TAX decimal(10,2)); insert into LINEITEM values (1,12.99,20, 8.5), (1, 8.99,30,11), (2,99.99,10,10), (2,49.99, 0, 8.5), (2, 3.99,50,14.7);
更新
ORDERS
前的內容:select * from ORDERS; O_ORDERKEY O_TOTALPRICE ---------- ------------ 1 0.00 2 0.00
建議的更新聲明:
update ORDERS O set O.O_TOTALPRICE = (select sum(L.L_EXTPRICE * (1 - L.L_DISCOUNT/100.0) * (1 + L.L_TAX/100.0)) from LINEITEM L where L.L_ORDERKEY = O.O_ORDERKEY);
更新
ORDERS
後的內容:select * from ORDERS; O_ORDERKEY O_TOTALPRICE ---------- ------------ 1 18.26 2 155.52
這是上面的rextester小提琴。