select goods_id,goods_type,goods_name,in_buy_price,ROUND(sum(in_total_price)/sum(in_amount),2),count(*) from in_warehouse_detail group by goods_id,goods_type,goods_name order by goods_id,goods_type,goods_name
查詢結果如下:
另一張關聯表【通過goods表的goods_Id和in_warehouse_detail表的goods_id關聯】
select goods_Id,goods_name,goods_sel_price,goods_buy_price from goods
希望實現效果
①根據主外鍵關聯將in_warehouse_detail查詢到的平均值【ROUND(sum(in_total_price)/sum(in_amount),2)】列數據更新到goods表的goods_buy_price 列
②查詢in_warehouse_detail表in_buy_price 和 ROUND(avg(in_buy_price),2)這兩列不同值 的數據
③查詢goods表goods_sel_price 列和in_warehouse_detail表 ROUND(avg(in_buy_price),2)這兩列不同值 的數據
后來自己琢磨出來點東西 覺得得使用臨時表來處理 查詢當前要做的事情后整合發現
select goods_Id,goods_name,goods_sel_price,goods_buy_price from goods
select g.goods_Id,g.goods_name,g.goods_type,g.goods_sel_price,g.goods_buy_price ,a.junjia from goods g,avg_prices a where g.goods_Id = a.goods_id and g.goods_sel_price != a.junjia
將上面的查詢結果塞入臨時表
DROP TABLE IF EXISTS avg_prices; create table avg_prices as select goods_id,goods_type,goods_name,in_buy_price, ROUND(sum(in_total_price)/sum(in_amount),2) as 'junjia',count(*) from scm.in_warehouse_detail group by goods_id,goods_type,goods_name order by goods_id,goods_type,goods_name;
查詢生成的臨時表里的數據
select * from avg_prices
那么解決的問題就變成了 如何 將第一張表里junjia字段根據id 條件批量更新到第二張表goods表內goods_buy_price字段值
通過個人不斷測試終於實現
多虧 沉淪啟發我語句
update a.junjia from goods g,avg_prices a set g.goods_sel_price = a.junji where g.goods_Id = a.goods_id
實現語句如下 可加個定時器 每日執行 就能解決實時均價這個難題
1 DROP TABLE IF EXISTS avg_prices; 2 3 create table avg_prices as 4 select goods_id,goods_type,goods_name,in_buy_price, 5 ROUND(sum(in_total_price)/sum(in_amount),2) as 'junjia',count(*) from scm.in_warehouse_detail 6 group by goods_id,goods_type,goods_name 7 order by goods_id,goods_type,goods_name;
源碼
---------如果當前數據庫里面存在 均價臨時表 則刪除掉--------- DROP TABLE IF EXISTS avg_prices; ---------創建均價臨時表並將查詢結果填充入臨時表--------- create table avg_prices as select goods_id,goods_type,goods_name,in_buy_price, ROUND(sum(in_total_price)/sum(in_amount),2) as 'junjia',count(*) from scm.in_warehouse_detail group by goods_id,goods_type,goods_name order by goods_id,goods_type,goods_name; ---------根據ID為關聯 批量更新goods表 update avg_prices a,goods g set g.goods_buy_price = a.junjia where g.goods_Id = a.goods_id and g.goods_sel_price != a.junjia ;
庫存也可這樣嘗試 批量更新goods表