Вывести все товары и количество проданных товаров за указанный период одним запросом Mysql

У меня есть 2 таблицы

  • my_data_1c - список товаров
  • my_data_1c_nomenclature - список продаж этих товаров по дате

Одним запросом хочу вывести все товары и количество проданных товаров за период (например с начало года) Имею такой запрос

SELECT my_data_1c.id
     , SUM(my_data_1c_nomenclature.count) as count
FROM my_data_1c 
LEFT JOIN my_data_1c_nomenclature ON 
       my_data_1c_nomenclature.id_product = my_data_1c.id_product 
WHERE my_data_1c.visible='1' 
      AND my_data_1c_nomenclature.id_product IN ('e3fece5f-3e42-11e9-80f6-1c1b0d3319f5', '1ad14c13-31cf-11ea-812e-1c1b0d3319f5')    
      AND (
           my_data_1c_nomenclature.cdate > '2021-01-01 00:00:00' 
           AND my_data_1c_nomenclature.cdate < '2021-03-09 09:20:19'
          )    
GROUP BY my_data_1c_nomenclature.id_product

Вроде бы все хорошо но вот SUM(my_data_1c_nomenclature.count) выводит сумму за весь период а не за указанный. Как победить?


Ответы (1 шт):

Автор решения: teran

Если вам продажи нужны за период, то и джойньте данные за этот период, иначе фильтруя в where вы получите только те твоары, которые были проданы, а не все (как указано в заголовке вопроса).

SELECT p.id_product
     , SUM(s.count) as count
FROM my_data_1c AS p
LEFT JOIN my_data_1c_nomenclature AS s ON  (
         s.id_product = p.id_product
         s.cdate between '2021-01-01 00:00:00'  AND  '2021-03-09 09:20:19'
       )
WHERE p.visible = 1
      AND p.id_product IN ('e3fece5f-3e42-11e9-80f6-1c1b0d3319f5', '1ad14c13-31cf-11ea-812e-1c1b0d3319f5')        
GROUP BY p.id_product
→ Ссылка