Как отсортировать и сгруппировать первые 2 элемента?
Мне нужно отсортировать нужные объекты и взять первые 2 элемента и сгруппировать. Для примера:
CREATE TEMP TABLE signal_info
(
id INTEGER NOT NULL,
signal INTEGER NOT NULL,
station CHAR(5) NOT NULL,
ownerid INTEGER NOT NULL
);
INSERT INTO signal_info VALUES(111, 120, 'Home', 1);
INSERT INTO signal_info VALUES(111, 130, 'Car' , 1);
INSERT INTO signal_info VALUES(111, 135, 'Work', 2);
INSERT INTO signal_info VALUES(222, 98 , 'Home', 2);
INSERT INTO signal_info VALUES(222, 95 , 'Work', 1);
INSERT INTO signal_info VALUES(111, 140, 'Home', 1);
INSERT INTO signal_info VALUES(222, 160 , 'Work', 1);
SELECT station, count(station) as countStation, sum(Signal) as sum
FROM signal_info
where station in ('Home', 'Work')
GROUP BY station
Для примера мне нужно отсортироть по большему signal и взять первые 2 элемента. Нужно получить: Work - 2 - 295 Home - 2 - 260
Как сделать? Использую SQL сервер
Ответы (1 шт):
Автор решения: Sergey Moiseenko
→ Ссылка
;with cte as
(select station, signal, row_number() over(partition by station order by signal desc) rn
from signal_info)
select station, sum(signal) from cte
where rn<=2 and station in
(select top 2 station from signal_info order by signal desc)
group by station;