Как использовать оконную функцию в Redshift SQL - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть такая таблица:

Ans_cnt | Workloadid | Alias
10 | 1 | A
10 | 1 | B
10 | 1 | C
20 | 2 | D
20 | 2 | E
20 | 2 | F

create temp table test
(ans_cnt int, workloadid int, alias varchar(2));

insert into test values
(10, 1, 'A');
insert into test values
(10, 1, 'B');
insert into test values
(10, 1, 'C');

Я хочу получить такой результат:

Ans_cnt | workloadid
10 | 1
20 | 2

т.е. для workloadid 1 всего ans_cnt по-прежнему равен 10. Для рабочей нагрузки 2 общее значение ans_cnt по-прежнему равно 20, только нескольким псевдонимам назначается одна и та же рабочая нагрузка. Надеюсь, что это имеет смысл.

Я пытался выполнить суммирование с помощью partitionin для workloadid, но оно не работает:

select sum(ans_cnt) over (partition by workloadid) as ans_cnt from test

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 02 марта 2020

Что произойдет, если у вас разные ans_cnt для одной и той же рабочей нагрузки ??

Например, в этом случае:

Ans_cnt | Workloadid | Alias
10 | 1 | A
10 | 1 | B
20 | 1 | C
10 | 2 | D
20 | 2 | E
30 | 2 | F

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

Если да, вам просто нужно это SQL:

select workloadid, max(ans_cnt) as ans_cnt from test
group by workloadid;

, которое выдаст это как вывод:

Ans_cnt | Workloadid
20 | 1
30 | 2

ИЛИ, если вы хотите выбрать последнюю версию ans_cnt и ваш псевдоним назначены в алфавитном порядке, вам нужно это SQL:

select ans_cnt, workloadid 
from (
       select ans_cnt, workloadid
         , row_number() over (partition by workloadid order by alias desc) as rnk 
       from test_1
) as t
where rnk=1
...