我是MySql的新手(3个月的YouTube教程),我的大多数经验来自PHP / HTML(4 - 5年建立网站),我正在尝试为我开始收集的一些数据构建报告。
非常感谢您提供的任何帮助!
我有一个MySql数据库,它收集多列材料/产品,这些材料/产品对应于建筑工地上使用的一定数量的材料。
目前的数据如下:
Material1 | Quantity1 | Material2 | Quantity2 | Material3 | Quantity3|
Concrete Bags| 35 | Hydroseed | 1300 | Diesel Fuel | 40 |
Straw Wattles| 32 | Wooden Stakes| 200 | Diesel Fuel | 30 |
Hydroseed | 1000 | Wooden Stakes| 100 | Diesel Fuel | 20 |
我可以使用什么查询或过程来添加相同名称材料的数量,并组合材料名称?
Hydroseed has two entries, 1300 + 1000 = 2300; Diesel Fuel has three entries, 40 + 30 + 20 = 90; etc.
Material1, Material2, Material3 = MaterialName
我想以下列方式显示它:
MaterialName | Quantity |
Concrete Bags | 35 |
Hydroseed | 2300 |
Straw Wattles | 32 |
Wooden Stakes | 300 |
Diesel Fuel | 90 |
我不确定如何处理这个问题。
我当前的查询如下所示:
("SELECT Material1 AS MaterialName FROM table UNION SELECT Material2 AS MaterialName FROM table UNION SELECT Material3 AS MaterialName FROM database GROUP BY MaterialName");
我不知道如何处理数量 - 我不知道如何组合这两个查询并使总数与正确的材料名称相匹配 - 可能是这样的东西:
("SELECT *, SUM(Quantity1 + Quantity2 + Quantity3) AS Quantity FROM table GROUP BY MaterialName");
您可以对三种类型的列数据的并集进行聚合:
SELECT material AS MaterialName, SUM(quantity) AS Quantity
FROM
(
SELECT Material1 AS material, Quantity1 AS quantity FROM yourTable UNION ALL
SELECT Material2, Quantity2 FROM yourTable UNION ALL
SELECT Material3, Quantity3 FROM yourTable
) t
GROUP BY material;
这里的基本策略是将三对材料数据分成两列。然后,按材料聚合并找到每种材料的数量总和。
顺便说一句,您当前的数据模型并不好,通常您不应该在多个列中存储相同的逻辑事物。考虑只有两列,一列用于材料,另一列用于数量。