Общее кол-во при 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. Весь запрос состоит из нескольких частей, которые можно разделить на следующие элементы:
- SELECT - указывает, какие столбцы нужно извлечь из таблицы.
table
.id,table
.name
,table
.value
- указывают, какие конкретно столбцы из таблицыtable
нужно извлечь.- SUM(table_ostatok.
count
) - используется функция SUM, которая суммирует значения столбцаcount
из таблицыtable_ostatok
. - FROM
table
- указывает, из какой таблицы нужно извлекать данные. - LEFT JOIN table_ostatok ON table_ostatok.id_good =
table
.id - используется оператор JOIN для объединения двух таблиц по значению столбцаid_good
из таблицыtable_ostatok
и любой строки из таблицыtable
. - GROUP BY
table
.id - используется оператор GROUP BY для группировки строк по значению столбцаid
из таблицыtable
. Таким образом, данный запрос извлекает из таблицыtable
столбцыid
,name
иvalue
, а также суммирует значения столбцаcount
из таблицыtable_ostatok
, при этом объединяя строки из обеих таблиц по значению столбцаid_good
. Результат будет содержать только уникальные записи из таблицыtable
, сгруппированные по значению столбцаid
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д