Объединение и суммирование таблиц SQL - MySQL

Узнай цену своей работы

Формулировка задачи:

Нужна помощь. Таблица Material с полями Naimenovanie, Kol, Cena_bez_NDS, Ed_izm Таблица Zakaz2 с полями Naimenovanie, Kol Наименование(Naimenovanie) в двух таблицах повторяется. Нужно сгруппировать по наименованию(Naimenovanie) и суммировать все строки количества(kol), которые соответствуют наименованию. Тоже самое с таблицей Zakaz2. Пример: таблица Material наименование_1 500 наименование_1 100 Таблица Zakaz2 Наименование_1 2 Наименование_1 3 --------------------- Вывод: наименование_1 600 Наименование_1 5 Тоже самое с таблицей Zakaz2. Объединить две эти таблицы.
SELECT
Material.Naimenovanie, Zakaz2.Naimenovanie,
 SUM(Material.Kol) AS Kol,
 MAX(Material.Cena_bez_NDS) AS Cena_bez_NDS,
 MAX(Material.Ed_izm) AS Ed_izm,
 SUM(Zakaz2.Kol) AS Kol
FROM Material LEFT OUTER JOIN Zakaz2
ON Material.Naimenovanie = Zakaz2.Naimenovanie
GROUP BY Material.Naimenovanie,Zakaz2.Naimenovanie
ORDER BY 1
Этот код работает, но он почему-то суммирует количество и умножает на количество одинаковых наименований, которые находятся в таблице Zakaz2(Material). Пример: таблица Material наименование_1 500 наименование_1 100 Таблица Zakaz2 Наименование_1 2 Наименование_1 3 -------------------- Выводит: Наименование_1 1200 Наименование_1 10

Решение задачи: «Объединение и суммирование таблиц SQL»

textual
Листинг программы
SELECT
Material.Naimenovanie,
 Material.Koll AS Koll,
 Material.Cena_bez_NDS AS Cena_bez_NDS,
 Material.Ed_izm AS Ed_izm,
 SUM(Zakaz2.Kol) AS Kol
FROM (SELECT Naimenovanie,
MAX(Cena_bez_NDS) AS Cena_bez_NDS,
 MAX(Ed_izm) AS Ed_izm,
SUM(Kol) AS Koll
FROM Material 
GROUP BY Naimenovanie) AS
Material LEFT OUTER JOIN Zakaz2
ON Material.Naimenovanie = Zakaz2.Naimenovanie
GROUP BY Material.Naimenovanie

Объяснение кода листинга программы

Код написан на SQL и выполняет объединение и суммирование таблиц. Вот список действий, которые выполняются в этом коде:

  1. Создается подзапрос, который выбирает из таблицы Material данные о названии материала, максимальной цене без НДС и количестве.
  2. Эти данные группируются по названию материала.
  3. Затем, основной запрос выбирает данные из таблицы Material и выполняет левое внешнее соединение с таблицей Zakaz2 по названию материала.
  4. В результате получается список данных, включающий название материала, его цену без НДС, количество и общее количество заказов (сумма количества всех заказов для каждого материала).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.25 из 5