Общее кол-во при left join - MySQL

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

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

Есть таблицы:
Листинг программы
  1. CREATE TABLE `table` (
  2. `id` INT(11) NOT NULL AUTO_INCREMENT,
  3. `name` VARCHAR(255) NOT NULL DEFAULT '',
  4. `value` VARCHAR(255) NOT NULL DEFAULT '',
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
  7. CREATE TABLE `table_ostatok` (
  8. `id` INT(11) NOT NULL AUTO_INCREMENT,
  9. `id_good` INT(11) NOT NULL DEFAULT '0',
  10. `id_sklad` INT(11) NOT NULL DEFAULT '0',
  11. `count` INT(11) NOT NULL DEFAULT '0',
  12. PRIMARY KEY (`id`)
  13. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
  14. INSERT INTO `table` (`name`,`value`) VALUES
  15. ('tovar1','kofe'),
  16. ('tovar2','moloko');
  17. INSERT INTO `table_ostatok` (`id_good`,`id_sklad`,`count`) VALUES
  18. ('1', '1', '5'),
  19. ('1', '2', '3'),
  20. ('2', '1', '1'),
  21. ('2', '2', '4'),
  22. ('2', '3', '5');
Необходимо для каждого товара выбирать остаток со склада. Выбирать как для конкретного склада:
Листинг программы
  1. SELECT
  2. `table`.*, `table_ostatok`.`count`
  3. FROM
  4. `table`
  5. LEFT JOIN
  6. `table_ostatok`
  7. ON `table_ostatok`.`id_good` = `table`.`id`
  8. AND `table_ostatok`.`id_sklad` = '1'
Так и общее кол-во на всех складах, вот собственно с общим количеством проблема, как посчитать для каждой записи?
т.е. для запроса где конкретно указан склад выберет результат: 1 | tovar1 | kofe | 5 2 | tovar2 | moloko | 1 а вот как выбрать так чтобы: 1 | tovar1 | kofe | 5 + 3 2 | tovar2 | moloko | 1 + 4 + 5

Решение задачи: «Общее кол-во при left join»

textual
Листинг программы
  1. SELECT
  2. `table`.id,
  3. `table`.`name`,
  4. `table`.`value`,
  5. SUM(table_ostatok.`count`)
  6. FROM `table`
  7. LEFT JOIN table_ostatok ON table_ostatok.id_good = `table`.id
  8. GROUP BY `table`.id

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

В данном коде выполняется запрос к базе данных с использованием SQL-оператора SELECT. Весь запрос состоит из нескольких частей, которые можно разделить на следующие элементы:

  1. SELECT - указывает, какие столбцы нужно извлечь из таблицы.
  2. table.id, table.name, table.value - указывают, какие конкретно столбцы из таблицы table нужно извлечь.
  3. SUM(table_ostatok.count) - используется функция SUM, которая суммирует значения столбца count из таблицы table_ostatok.
  4. FROM table - указывает, из какой таблицы нужно извлекать данные.
  5. LEFT JOIN table_ostatok ON table_ostatok.id_good = table.id - используется оператор JOIN для объединения двух таблиц по значению столбца id_good из таблицы table_ostatok и любой строки из таблицы table.
  6. GROUP BY table.id - используется оператор GROUP BY для группировки строк по значению столбца id из таблицы table. Таким образом, данный запрос извлекает из таблицы table столбцы id, name и value, а также суммирует значения столбца count из таблицы table_ostatok, при этом объединяя строки из обеих таблиц по значению столбца id_good. Результат будет содержать только уникальные записи из таблицы table, сгруппированные по значению столбца id.

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут