Как работает MySQL aggregate sum с двумя различными таблицами данных?

#mysql #sum #aggregate

Вопрос:

tbl_categories_количество

  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-я таблица), который не работает

tbl_продукт_продажа

 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 для расчета доступных запасов Я поделюсь скриншотом.