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

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

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

Есть таблицы:
CREATE TABLE `table` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL DEFAULT '',
  `value` VARCHAR(255) NOT NULL DEFAULT '',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
 
CREATE TABLE `table_ostatok` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `id_good` INT(11) NOT NULL DEFAULT '0',
  `id_sklad` INT(11) NOT NULL DEFAULT '0',
  `count` INT(11) NOT NULL DEFAULT '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
 
INSERT INTO `table` (`name`,`value`) VALUES 
('tovar1','kofe'), 
('tovar2','moloko');
 
INSERT INTO `table_ostatok` (`id_good`,`id_sklad`,`count`) VALUES 
('1', '1', '5'),
('1', '2', '3'),
('2', '1', '1'),
('2', '2', '4'),
('2', '3', '5');
Необходимо для каждого товара выбирать остаток со склада. Выбирать как для конкретного склада:
SELECT
  `table`.*, `table_ostatok`.`count`
FROM
  `table`
LEFT JOIN 
  `table_ostatok`
    ON `table_ostatok`.`id_good` = `table`.`id`
      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
Листинг программы
SELECT
`table`.id,
`table`.`name`,
`table`.`value`,
SUM(table_ostatok.`count`)
FROM `table`
LEFT JOIN table_ostatok ON table_ostatok.id_good = `table`.id
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