Как найти общую сумму наименее продаваемого продукта за конкретный месяц (независимо от года)

#sql #postgresql

#sql #postgresql

Вопрос:

У меня есть таблица, состоящая из продуктов, приобретенных клиентами на определенную дату. Сначала я должен найти наименее продаваемый продукт в таблице за все 12 месяцев (независимо от года), а затем найти общий объем продаж (сумму количеств) для этого продукта за этот конкретный месяц. Я выполнил первую часть, которая заключается в поиске наименее продаваемого продукта за разные 12 месяцев. Теперь, как найти общую сумму количеств для этого продукта, встречающихся в таблице за этот конкретный месяц.

Запрос, который находит наименее популярный продукт за все 12 месяцев

 with
    min_quant_table as (
        select distinct month, min(quant) as quant
        from myTable
        group by month
    )
select
    distinct month,
    prod as least_popular_prod,
    quant as least_popular_total_q
from min_quant_table
natural join myTable
  

Вывод (только для ссылки):

 Month        Least_Popular_Product          Least_Popular_Total_Sum_Quantity
1            Milk                           23126 
2            Eggs                           45514
3            Pepsi                          21457
  

Это рабочий пример для запроса:
http://sqlfiddle.com /#!9/4d756f/2

Комментарии:

1. В вашем вопросе недостаточно полезных деталей, чтобы мы могли вам помочь. Ознакомьтесь с этим сообщением , а затем отредактируйте свой вопрос по мере необходимости.

2. Спасибо за добавление скрипки! Вы отметили свой вопрос postgresql, но предоставили MySQL Fiddle. Какой из них вы на самом деле используете?

3. Кроме того, не могли бы вы, пожалуйста, показать ожидаемый результат, учитывая данные в вашем скрипте?

4. Я делаю это в PostgreSQL. Извините за это, но мне просто нужно было указать общую работу запроса.

Ответ №1:

Я использую в основном T-SQL, но я думаю, что PostgreSQL имеет оконные функции. Ваш запрос выглядит хорошо, я просто добавил функцию ROW_NUMBER () и заказал по минимальному количеству за данный месяц, затем выбрал для этого верхний вариант. Кроме того, я добавил функцию SUM () для количеств каждого продукта за месяц.

Я думаю, что следующее должно быть хорошим или, по крайней мере, указать вам правильное направление.

 ;with min_quant_table as (
    select T.[prod]
    ,   T.[month]
    ,   MIN(T.quant) as min_quant
    ,   SUM(T.quant) as tot_quant
    ,   [rn] = row_number() over(partition by T.[month] order by min(T.quant))
    from #_tmp AS T
    group by T.prod, T.[month]
)
select abc.[month]
,   abc.[prod] as least_popular_prod
,   abc.min_quant as least_popular_min_q
,   abc.tot_quant as least_popular_total_q
from min_quant_table as abc
where abc.rn = '1'
  

Тогда ваш результат будет примерно таким:

 month   least_popular_prod  least_popular_min_q least_popular_total_q
1           Coke                    1557                    1557
2           Milk                    126                     126
3           Milk                    58                      58
4           Yogurt                  301                     1504
5           Milk                    1457                    1457
6           Yogurt                  363                     363
7           Yogurt                  17                      17
8           Milk                    1132                    1132
9           Bread                   42                      42
10          Yogurt                  730                     730
11          Milk                    210                     2632
12          Pepsi                   653                     7887