#mysql #sum #aggregate
Вопрос:
SELECT
category_id,
product_size,
category_name,
SUM(product_quantity) AS total_quantity
FROM tbl_categories_quantity -- (table-1)
INNER JOIN tbl_categories USING (category_id)
GROUP BY category_id,product_size
Приведенный выше код работает в одной таблице, и я хочу добавить приведенный ниже код (2-я таблица), который не работает
SELECT
category_id,
product_size,
SUM(product_sell) AS total_sell
FROM tbl_product_sell -- (table-2)
GROUP BY category_id,product_size;
Комментарии:
1. Множественное значение для категории 1, где другие значения уникальны. возможно ли это?
2. Добавлен дополнительный скриншот # Рахул Бисвас
3. пожалуйста, проверьте мой ответ ниже.
4. #Мистер Рахул Бисвас, ваш пост с повтором исчез.
5. Поможет ли вам мой пост? Пожалуйста, проверьте мой запрос ниже.
Ответ №1:
Из первого подзапроса извлекается общее количество по категориям и размеру продукта, а из второго-общий объем продаж в зависимости от категории и размера продукта. Затем объедините эти два подзапроса с ЛЕВЫМ СОЕДИНЕНИЕМ, потому что иногда продажа может не состояться. Функция COALESCE() используется для замены нулевого значения на 0 (ноль). Если требуются данные по конкретной категории или размеру продукта, используйте предложение WHERE в обоих подзапросах. Поскольку идентификатор категории уникален, поэтому используется МАКС(имя_категории), в противном случае имя категории должно быть помещено в предложение GROUP BY. Вычтите общую сумму продажи из общего количества для расчета доступного количества.
-- MySQL
SELECT t.category_name category
, t.product_size
, t.product_quantity
, COALESCE(p.total_sell, 0) product_sell
, (t.product_quantity - COALESCE(p.total_sell, 0)) available_in_stock
FROM (SELECT tc.category_id
, tcq.product_size
, MAX(tc.category_name) category_name
, SUM(tcq.product_quantity) product_quantity
FROM tbl_categories tc
INNER JOIN tbl_categories_quantity tcq
ON tc.category_id = tcq.category_id
GROUP BY tc.category_id
, tcq.product_size) t
LEFT JOIN (SELECT category_id
, product_size
, SUM(product_sell) total_sell
FROM tbl_stock_sell
GROUP BY category_id
, product_size) p
ON t.category_id = p.category_id
AND t.product_size = p.product_size
Пожалуйста, проверьте по URL https://dbfiddle.uk/?rdbms=mysql_5.7amp;fiddle=b8c54aa656d9dc930fcb7a93d2bc0960
N. B.: Имя таблицы или столбца может отличаться в зависимости от вашей базы данных.
Комментарии:
1. Сообщение об ошибке #Рахул Бисвас
2. пожалуйста, дайте мне сообщение об ошибке. @Маунгчанг
3. Предупреждение: mysqli_error() ожидает ровно 1 параметр, 0 задано в
4. Любые обновления касаются этого.
5. Есть три таблицы, и это агрегатная функция. 1. tbl_categories для внутреннего соединения ( название категории) 2. tbl_categories_quantity для количества и размера продукта 3. таблица tbl_product_sell для расчета доступных запасов Я поделюсь скриншотом.