BigQuery — Решение основной ошибки группировки/агрегации

Я хочу вывести сумму годового дохода по продукту, а также включить столбец с годом выпуска каждого продукта (на основе даты первого заказа).

Я не могу понять, что я здесь делаю неправильно, так как я могу выполнять каждый расчет отдельно, но не в рамках одного запроса, я уверен, что это основное непонимание группировки или агрегации, но я не могу понять это.

With input_data AS (

SELECT '#1238' as order_id, DATE('2021-12-15') as order_date, 'c12345' as sku, 18 as order_value
UNION ALL SELECT '#1201', DATE('2021-10-10'), 'c12345', 18
UNION ALL SELECT '#1198', DATE('2021-07-05'), 'c12345', 20
UNION ALL SELECT '#1134', DATE('2020-10-15'), 'c12345', 10 
UNION ALL SELECT '#1112', DATE('2019-08-10'), 'c12345', 5 
UNION ALL SELECT '#1234', DATE('2021-07-05'), 'c11111', 118
UNION ALL SELECT '#1294', DATE('2021-01-05'), 'c11111', 68 
UNION ALL SELECT '#1290', DATE('2021-01-01'), 'c11111', 82
UNION ALL SELECT '#1284', DATE('2020-01-15'), 'c22222', 98 )

SELECT 
sku,
--format_date('%Y', min(order_date)) as year_intro1,
format_date('%Y', min(order_date) over (partition BY sku)) as year_intro2,
format_date('%Y', order_date) as year_order,
sum(order_value) as year_rev

FROM input_data
GROUP BY 1,3

year_intro всегда будет иметь одно значение для каждого артикула.

Я думаю, что хочу year_intro2, который дает мне ошибку.

year_intro1 работает, но просто получает минимальное значение в каждом доходном году (как показано ниже).

Желаемый результат для c12345 year_intro имеет значение 2019 для всех значений year_order.

BigQuery — Решение основной ошибки группировки/агрегации

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

Ответы 1

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

Рассмотрим ниже подход

select sku, any_value(year_intro) year_intro, year_order, sum(order_value) year_rev
from (
  select sku, order_value, 
    extract(year from order_date) as year_order,
    min(extract(year from order_date)) over(partition by sku) year_intro
  from input_data
)
group by sku, year_order   

 

если применяется к выборочным данным в вашем вопросе - вывод

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