#sql #postgresql
#sql #postgresql
Вопрос:
Таблица:
индикация | число |
---|---|
остановка | 6 |
остановка | 2 |
начать | 3 |
начать | 8 |
остановка | 7 |
остановка | 3 |
остановка | 2 |
начать | 8 |
начать | 3 |
Вывод решения:
индикация | sum_values |
---|---|
остановка | 8 |
начать | 11 |
остановка | 12 |
начать | 11 |
WITH stop_start(indication, num) AS (
VALUES
('stop' , 6),
('stop' , 2),
('start' , 3),
('start' , 8),
('stop' , 7),
('stop' , 3),
('stop' , 2),
('start' , 8),
('start' , 3)
)
SELECT * FROM stop_start;
Комментарии:
1. Пожалуйста, объясните логику. И если вы предполагаете порядок строк, то SQL требует, чтобы столбец содержал порядок.
Ответ №1:
Это проблема с пробелами и островами — при условии, что у вас есть столбец, который задает порядок. Вероятно, самым простым решением является использование разницы номеров строк для идентификации групп:
select indication, sum(num)
from (select ss.*,
row_number() over (partition by indication order by ?) as seqnum_2,
row_number() over (order by ?) as seqnum
from stop_start ss
) ss
group by indication, (seqnum - seqnum_2);
Это ?
для столбца, который задает порядок.
Вот db<>fiddling .