2017-08-31 83 views
-1

Mysql問題:我的公司出售穀物。我們買了一大批糧食,然後以小包裝的形式出售。我們收到的每批散貨都有自己的批號,其他數據也與此號碼相關聯。Mysql按id對列組進行求和,然後用另一個表中的值將每個id的總和除以每行的匹配id

我有一個庫存表和一個產品變體表。

Sample of Warehouse_inventory_table

<table><tbody><tr><th>inventoryid</th><th>productid </th><th>weight</th><th>batch</th><th>location</th><th>lot</th><th> </th><th> </th></tr><tr><td>1203</td><td>16134</td><td>0.000</td><td>1</td><td>LC Bucket</td><td>S1090</td><td> </td><td> </td></tr><tr><td>1882</td><td>16137</td><td>0.000</td><td>1</td><td>Small Cargo</td><td>S1025</td><td> </td><td> </td></tr><tr><td>603</td><td>16138</td><td>0.000</td><td>0</td><td>Archived</td><td>254-03-901</td><td> </td><td> </td></tr><tr><td>2695</td><td>16138</td><td>0.000</td><td>0</td><td>Archived</td><td>254-03-002-1</td><td> </td><td> </td></tr><tr><td>4086</td><td>16138</td><td>0.000</td><td>0</td><td>Archived</td><td>G-500-WD</td><td> </td><td> </td></tr><tr><td>4582</td><td>16138</td><td>150.000</td><td>2</td><td>Bulk Cargo</td><td>2373</td><td> </td><td> </td></tr><tr><td>4879</td><td>16138</td><td>30.885</td><td>1</td><td>LC Bucket</td><td>2373</td><td> </td><td> </td></tr><tr><td>3382</td><td>16139</td><td>1.516</td><td>1</td><td>On Shelf</td><td>S1520</td><td> </td><td> </td></tr><tr><td>256</td><td>16141</td><td>0.000</td><td>0</td><td>Archived</td><td>F6411</td><td> </td><td> </td></tr><tr><td>1963</td><td>16141</td><td>0.000</td><td>0</td><td>Archived</td><td>P6611</td><td> </td><td> </td></tr><tr><td>2090</td><td>16141</td><td>0.000</td><td>0</td><td>Archived</td><td>P6389</td><td> </td><td> </td></tr><tr><td>3470</td><td>16141</td><td>12.588</td><td>1</td><td>LC Bucket</td><td>N3915</td><td> </td><td> </td></tr><tr><td>4526</td><td>16141</td><td>27.000</td><td>2</td><td>Bulk Cargo</td><td>N3915</td><td> </td><td> </td></tr><tr><td>233</td><td>16142</td><td>6.991</td><td>1</td><td>LC Bucket</td><td>20701</td><td> </td><td> </td></tr><tr><td>281</td><td>16142</td><td>0.000</td><td>0</td><td>Archived</td><td>23055</td><td> </td><td> </td></tr><tr><td>1065</td><td>16142</td><td>50.000</td><td>4</td><td>Bulk Cargo</td><td>20123</td><td> </td><td> </td></tr><tr><td>2479</td><td>16142</td><td>30.821</td><td>3</td><td>Bulk Cargo</td><td>P6005</td><td> </td><td> </td></tr><tr><td>2097</td><td>16143</td><td>0.000</td><td>1</td><td>LC Bucket</td><td>34294</td><td> </td><td> </td></tr><tr><td>665</td><td>16144</td><td>0.000</td><td>0</td><td>Archived</td><td>W3178</td><td> </td><td> </td></tr><tr><td>1752</td><td>16144</td><td>0.000</td><td>0</td><td>Archived</td><td>12646</td><td> </td><td> </td></tr><tr><td>3629</td><td>16144</td><td>0.000</td><td>0</td><td>LC Bucket</td><td>M3386-1</td><td> </td><td> </td></tr><tr><td>4564</td><td>16144</td><td>28.000</td><td>2</td><td>Bulk Cargo</td><td>M3386-1</td><td> </td><td> </td></tr><tr><td>4830</td><td>16144</td><td>13.971</td><td>1</td><td>LC Bucket</td><td>M3386-1</td><td> </td><td> </td></tr><tr><td>243</td><td>16146</td><td>26.750</td><td>2</td><td>Bulk Cargo</td><td>D3302</td><td> </td><td> </td></tr><tr><td>656</td><td>16146</td><td>1.444</td><td>1</td><td>LC Bucket</td><td>D3302</td><td> </td><td> </td></tr><tr><td>3637</td><td>16146</td><td>50.000</td><td>3</td><td>Bulk Cargo</td><td>34636</td><td> </td><td> </td></tr><tr><td>1531</td><td>16149</td><td>0.000</td><td>0</td><td>Archived</td><td>S1086</td><td> </td><td> </td></tr><tr><td>2735</td><td>16149</td><td>46.000</td><td>3</td><td>Bulk Cargo</td><td>18/64</td><td> </td><td> </td></tr><tr><td>3128</td><td>16149</td><td>0.000</td><td>1</td><td>SC Bucket</td><td>S1528</td><td> </td><td> </td></tr><tr><td>3129</td><td>16149</td><td>1.238</td><td>2</td><td>SC Bucket</td><td>S1555</td><td> </td><td> </td></tr></tbody></table>

Sample of Variants_Table

<table><tbody><tr><th>variantid</th><th>productid</th><th>avail</th><th>weight</th><th>package_weight</th></tr><tr><td>404</td><td>16142</td><td>224</td><td>0.013</td><td>0.009</td></tr><tr><td>405</td><td>16142</td><td>8</td><td>0.280</td><td>0.270</td></tr><tr><td>409</td><td>16142</td><td>10</td><td>1.100</td><td>1.100</td></tr><tr><td>450</td><td>16141</td><td>225</td><td>0.006</td><td>0.002</td></tr><tr><td>509</td><td>16144</td><td>126</td><td>0.011</td><td>0.007</td></tr><tr><td>511</td><td>16144</td><td>10</td><td>0.074</td><td>0.070</td></tr><tr><td>512</td><td>16144</td><td>10</td><td>0.280</td><td>0.270</td></tr><tr><td>620</td><td>16138</td><td>110</td><td>0.039</td><td>0.035</td></tr><tr><td>622</td><td>16138</td><td>16</td><td>0.280</td><td>0.270</td></tr><tr><td>623</td><td>16138</td><td>12</td><td>1.100</td><td>1.100</td></tr><tr><td>917</td><td>16142</td><td>2</td><td>5.300</td><td>5.200</td></tr><tr><td>979</td><td>16146</td><td>10</td><td>1.100</td><td>1.100</td></tr><tr><td>1157</td><td>16144</td><td>11</td><td>1.100</td><td>1.100</td></tr><tr><td>1158</td><td>16144</td><td>5</td><td>5.300</td><td>5.200</td></tr><tr><td>3644</td><td>16138</td><td>6</td><td>5.300</td><td>5.200</td></tr><tr><td>3645</td><td>16138</td><td>2</td><td>26.000</td><td>25.500</td></tr><tr><td>3646</td><td>16138</td><td>1</td><td>52.000</td><td>51.000</td></tr><tr><td>3917</td><td>16141</td><td>11</td><td>0.074</td><td>0.070</td></tr><tr><td>3918</td><td>16141</td><td>8</td><td>0.280</td><td>0.270</td></tr><tr><td>3919</td><td>16141</td><td>13</td><td>1.100</td><td>1.100</td></tr><tr><td>3920</td><td>16141</td><td>2</td><td>5.300</td><td>5.200</td></tr><tr><td>3997</td><td>16143</td><td>6</td><td>0.011</td><td>0.007</td></tr><tr><td>4000</td><td>16143</td><td>0</td><td>0.074</td><td>0.070</td></tr><tr><td>4001</td><td>16143</td><td>0</td><td>0.280</td><td>0.270</td></tr><tr><td>4002</td><td>16143</td><td>0</td><td>1.100</td><td>1.100</td></tr></tbody></table>

列I N需要處理的是來自庫存表的重量,以及來自變體表的package_weight和avail列。

我打算爲每個variantid更新可用列,以根據庫存表中相同產品ID的不同批次的總計權重,顯示每個尺寸有多少個可用包。

每個產品尺寸在變量表中都有自己的變體,它與庫存表中的產品相關聯(在變量表中有一個名爲productid的列)。每個variantid都有其自己的package_weight列,其分組大小權重以磅爲單位。

問題我嘗試用SQL代碼來解決是

我們需要找出我們在英鎊每個種子產品ID種子的總金額,並顯示有多少包可用於每個不同尺寸的變體目前並將其放在每個產品的每個不同尺寸變體的可用列中。

我編寫了一個簡單的SQL查詢來獲取來自庫存表中具有匹配productid的不同批號的總權重。這工作正常,但我迷失在下一步。

SELECT productid, SUM(weight) 
FROM warehouse_inventory 
GROUP BY productid; 

<table><tbody><tr><th>productid</th><th>SUM(weight)</th><th> </th></tr><tr><td>16134</td><td>0.000</td><td> </td></tr><tr><td>16137</td><td>0.000</td><td> </td></tr><tr><td>16138</td><td>180.885</td><td> </td></tr><tr><td>16139</td><td>1.516</td><td> </td></tr><tr><td>16141</td><td>39.588</td><td> </td></tr><tr><td>16142</td><td>87.812</td><td> </td></tr><tr><td>16143</td><td>0.000</td><td> </td></tr><tr><td>16144</td><td>41.971</td><td> </td></tr><tr><td>16146</td><td>78.194</td><td> </td></tr><tr><td>16149</td><td>47.238</td><td> </td></tr></tbody></table>

現在我需要再採取這一結果,其中有總計爲每個產品ID,並通過更小尺寸的包總重量將每個產品,以顯示有多少這種規模的數據包可用於每個不同大小的variantid的package_weight,並具有匹配的productid。

例如:

找到多少1盎司冬黑麥包可現在我們採取我們的總重量,冬黑麥的2000磅,並通過其package_weight 0.07磅把它(1盎司)這表明我們有28571個數據包可用。

如何將變量表中的可用數據放入變量列中的可用列中?

我是新來的SQL,但我想是這樣的:如果

INSERT INTO variants(avail) 
VALUES(@updated_variant_amount_avail) 

SET @product_total_weight := (SELECT i.productid, SUM(weight) 
           FROM warehouse_inventory AS i 
           GROUP BY i.productid;) 

INNER JOIN variants AS v ON v.productid = i.productid 

SET @updated_variant_amount_avail := SUM(@product_total_weight /v.package_weight) 

不知道這是可能的只是SQL。我一直在尋找到存儲過程,並想知道如果我應該考慮嘗試這種走這樣一條路。還是有更好的解決方案?我應該試圖用mysql來做到這一點嗎?

而且,這需要像一次或兩次的日子,所以我打算做一個MySQL事件上運行。有沒有更好的方法去做這件事?

+0

見https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-將要-A-極簡單的SQL查詢 – Strawberry

回答

1

這可能工作

select productid as 'Product', 
     sum(weight) as 'Total weight', 
     (sum(weight)/InF2.package_weight) as 'Packets' 
    From TABLE_containing_totalweights as InF1 
    Left Join TABLE_containing_packetweights as InF2 
    On InF1.productID = InF2.productID 
+0

這並沒有得到結果即時尋找。我試圖讓每個產品量之和與同匹配的productid更新所有variantid行的「果」欄,顯示有多少相同產品的每個版本的離開了。我添加了正在使用的表格的樣本 – infowarrior466

相關問題