Как создать оператор case, который группирует поля?

Как создать оператор case, который группирует поля?

Я пытаюсь понять, как сгруппировать значения вместе, чтобы добавить индикатор. Я хочу «исправить» значения и на их основе атрибутировать индикатор.

Значения, которые я пытаюсь сгруппировать, — это дата, имя клиента и тип продукта, чтобы создать индикатор, который фиксирует, какой тип заказа был размещен (только фрукты, фрукты и овощи, только овощи). Цель состоит в том, чтобы рассчитать общий объем каждого типа размещенного заказа. Данные расположены следующим образом, а столбец, который я пытаюсь создать, — это «Тип заказа».

Что я сделал до сих пор:

  • Первоначально я выполнил этот анализ в Tableau, где я смог использовать функцию «Фиксированный» и суммировать значения показателей (для фруктов или овощей), чтобы определить каждый тип заказа в отдельности.
  • Я написал операторы case, чтобы определить тип продукта, с идеей, что я могу суммировать это, чтобы определить тип заказа (код ниже), однако это не сработало, поскольку мне нужен только один экземпляр индикатора для каждого заказа. Чтобы решить эту проблему, я написал оператор case, который разделяет поля и заказы по дате, чтобы получить один экземпляр индикатора для каждого заказа.

Утверждения дела

    CASE WHEN Product_Type = 'Fruit' THEN 1 ELSE 0 END AS Fruit_Indicator
, CASE WHEN Product_Type = 'Vegetable' THEN 1 ELSE 0 END AS Veg_Indicator

Постановка случая с разделением и порядком по

, CASE WHEN ROW_NUMBER() OVER (PARTITION BY Order_Date, Customer  ORDER BY Order_Date ASC) = 1  AND Product_Type =  'Fruit' THEN 1 ELSE NULL END AS Fruit_Ind
, CASE WHEN ROW_NUMBER() OVER (PARTITION BY Order_Date, Customer  ORDER BY Order_Date ASC) = 1 AND Product_Type =  'Vegetable' THEN 1 ELSE NULL END AS Veg_Ind

Буду признателен за любые указания в правильном направлении.

Спасибо!

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

Roman Marusyk 22.03.2022 01:26

Привет, спасибо за ваш комментарий и ссылки на эти темы. Я отредактировал свой первоначальный вопрос.

evdo_d 22.03.2022 01:47

У вас больше шансов получить ответ, если вы предоставите данные в виде текста, а не изображений. Также уточните цель - это сгенерировать «отчет», который вы показываете на изображении, или подсчитать количество заказов каждого типа или что-то совсем другое?

Fred 22.03.2022 16:56
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
3
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

КАЖЕТСЯ, вы пытаетесь получить данные, сгруппированные по дате, например, 21 марта, 22 марта и т. д. Итак, вы можете захотеть иметь вторичный запрос для присоединения к первичным данным. Второй запрос будет сводным по клиенту и дате. Если поле даты ориентировано на дату/время, вам придется настроить группу, чтобы получить правильно отформатированный контекст, такой как формат даты, используя месяц/день/год и игнорируя любой компонент времени. Это также может быть обработано функцией, которая просто получает часть даты и игнорирует время. Затем ваши исходные данные в совокупности должны дать вам то, что вам нужно. Может что-то вроде.

select
      yt.date,
      yt.customer,
      yt.product,
      yt.productType,
      case when PreQuery.IsFruit > 0 and PreQuery.IsVegetable > 0
           then 'Fruit & Vegetable'
           when PreQuery.IsFruit > 0 and PreQuery.IsVegetable = 0
           then 'Fruit Only'
           when PreQuery.IsFruit = 0 and PreQuery.IsVegetable > 0
           then 'Vegetable Only' end OrderType
   from
      YourTable yt
         JOIN
         ( select
                 yt2.customer,
                 yt2.date,
                 max( case when yt2.ProductType = 'Fruit'
                           then 1 else 0 end ) IsFruit,
                 max( case when yt2.ProductType = 'Vegetable'
                           then 1 else 0 end ) IsVegetable
              from
                 YourTable yt2
              -- if you want to restrict time period, add a where
              -- clause here on the date range as to not query entire table
              group by
                 yt2.customer,
                 yt2.date ) PreQuery
            ON yt.customer = PreQuery.customer
           AND yt.date = PreQuery.date
   -- same here for your outer query to limit just date range in question.
   -- if you want to restrict time period, add a where
   -- clause here on the date range as to not query entire table
   order by
      yt.date,
      yt.customer,
      yt.product

Спасибо за ваш ответ - это то, что я искал. Я не думал о создании второго запроса для группировки клиентов и дат.

evdo_d 28.03.2022 01:44

Другие вопросы по теме