Snowflake查询中的带窗口功能的条件分组依据

问题描述 投票:0回答:1

我在Snowflake中有一个表格,格式如下:

create temp_test(name string, split string, value int)

insert into temp_test
values ('A','a', 100), ('A','b', 200), ('A','c',300), ('A', 'd', 400), ('A', 'e',500), ('B', 'a', 1000), ('B','b', 2000), ('B','c', 3000), ('B', 'd',4000), ('B','e', 5000)

第一步,我只需要每个名称的前2个值(按值排序),所以我使用以下查询来获得该值:

select name, split, value,
row_number() over (PARTITION BY (name) order by value desc) as row_num 
from temp_test
qualify row_num <= 2

哪个给我以下结果集:

NAME    SPLIT   VALUE   ROW_NUM
A       e       500     1
A       d       400     2
B       e       5000    1
B       d       4000    2

现在,我需要对除前2个值以外的值求和,并将其放在另一个名为“其他”的拆分中,如下所示:

NAME    SPLIT   VALUE   
A       e       500     
A       d       400     
A       Others  600        
B       e       5000    
B       d       4000
B       Others  6000     

一般如何在Snowflake查询或SQL中做到这一点?

sql window-functions snowflake-cloud-data-platform row-number
1个回答
0
投票
with data as (
    select name, split, value,
        row_number() over (partition by (name) order by value desc) as row_num 
    from temp_test
)
select
    name,
    case when row_num <= 2 then split else 'Others' end as split,
    sum(value) as value
from data
group by name, case when row_num <= 2 then row_num else 3 end
© www.soinside.com 2019 - 2024. All rights reserved.