【发布时间】:2017-08-31 23:02:26
【问题描述】:
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 列。
我正在尝试根据库存表中相同产品 id 的不同批次的总重量来更新每个 variantid 的可用性列,以显示每种尺寸有多少包可用。
每个产品尺寸在变体表中都有自己的变体 ID,它与库存表中的产品 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>
现在我需要获取具有每个 productid 总数的结果,然后将每个产品总数除以较小的数据包重量,以显示每个不同大小的 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 事件。有没有更好的方法来解决这个问题?
【问题讨论】: