BigQuery - 解决基本的分组/聚合错误
BigQuery - Solving a basic grouping/ aggregation error
我希望输出每个产品每年的收入总和,但还包括一个包含每个产品推出年份的列(基于首次订购日期)。
我不知道我在这里做错了什么,因为我可以单独进行每个计算,但似乎不是在同一个查询中,我确信这是对分组或聚合的基本误解,但我无法理解出。
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 始终是每个 sku 一个值
我想我想要 year_intro2 这给了我错误。
year_intro1 有效,但只获取每个收入年度内的最小值(如下所示)。
c12345 year_intro 的所需输出对于所有 year_order 值的值为 2019。
考虑以下方法
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
如果应用于您问题中的示例数据 - 输出为
我希望输出每个产品每年的收入总和,但还包括一个包含每个产品推出年份的列(基于首次订购日期)。
我不知道我在这里做错了什么,因为我可以单独进行每个计算,但似乎不是在同一个查询中,我确信这是对分组或聚合的基本误解,但我无法理解出。
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 始终是每个 sku 一个值
我想我想要 year_intro2 这给了我错误。
year_intro1 有效,但只获取每个收入年度内的最小值(如下所示)。
c12345 year_intro 的所需输出对于所有 year_order 值的值为 2019。
考虑以下方法
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
如果应用于您问题中的示例数据 - 输出为