Mysql问题:我的公司出售谷物。我们购买大批量的谷物并以小包装出售。我们收到的每批散货都有自己的批号,其他数据也与该号码相关联。
我有一个库存表和一个产品变体表。
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>
<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>
我需要使用的列是库存表中的权重,以及变量表中的package_weight和avail列。
我要更新每个variantid的avail列,以显示每个大小的可用数据包数,基于清单表中相同产品ID的不同批次的总重量。
每个产品尺寸在变量表中都有自己的variantid,它与库存表中的productid相关联。(变量表中有一个名为productid的列)。每个variantid都有自己的package_weight
列,其数据包大小权重为lbs。
我试图用SQL代码解决的问题是
我们需要找出每个种子产品ID我们以磅为单位的种子总数,并显示目前每种不同大小的变体可用的包数,并将其放入每个不同大小变体的avail列中每个产品。
我编写了一个简单的SQL查询,以从库存表中具有匹配产量的不同批号获取总权重。这很好,但是我在下一步就输了。
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>
现在我需要获取结果,该结果包含每个产品的总数,并将每个产品总数除以较小的数据包权重,以显示每个不同大小的variantid的package_weight与匹配的productid可用的大小数据包的数量。
例如:
现在我们可以获得多少1盎司冬季黑麦包,我们采用我们的总重量,2000磅冬季黑麦谷物,并将其除以package_weight .07磅(1盎司),这表明我们有28571包可用。
如何将可用金额放入变体表的avail列?
我是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 :(得分: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