Я новичок в 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.
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;
Основная стратегия здесь состоит в том, чтобы привести три пары материальных данных в две колонки. Затем агрегируйте по материалу и найдите сумму количества для каждого материала.
Кстати, ваша текущая модель данных не очень хорошая, и в целом вы не должны хранить одну и ту же логическую вещь в нескольких столбцах. Рассмотрим только наличие двух столбцов, один для материала, а другой для количества.