В Postgres, у меня есть исторический стол для системы метро, которая имеет такую структуру:В Postgres, как я могу получить подгруппу с максимальным значением для группы?
CREATE TABLE stop_history
(
stop_id character varying,
route_id character varying,
next_stop_id character varying
);
Я пытаюсь выяснить: Для остановки и маршрута, что является наиболее распространенной следующей остановкой?
Что мне нужно сделать: Группируйте по остановке, маршрутам и следующей остановке, и получите количество этих групп. Для каждой из этих групп получите группу с наибольшим счетом для каждой комбинации stop_id и route_id.
Как написать такой запрос postgres, и какие индексы я должен разместить в этой таблице, чтобы максимизировать производительность?
Одна из проблем, с которыми я сталкиваюсь, не может использовать count(*)
или max(count(*))
в предложении where.
С данными выборки:
INSERT INTO stop_history VALUES ('101N', '1', NULL);
INSERT INTO stop_history VALUES ('102N', '1', '101N');
INSERT INTO stop_history VALUES ('103N', '1', '102N');
INSERT INTO stop_history VALUES ('104N', '1', '103N');
INSERT INTO stop_history VALUES ('104N', '1', '103N');
INSERT INTO stop_history VALUES ('104N', '1', '102N');
INSERT INTO stop_history VALUES ('104N', '1', '103N');
INSERT INTO stop_history VALUES ('104N', '1', '102N');
INSERT INTO stop_history VALUES ('101N', 'D', NULL);
INSERT INTO stop_history VALUES ('102N', 'D', '101N');
INSERT INTO stop_history VALUES ('102N', 'D', '101N');
INSERT INTO stop_history VALUES ('102N', 'D', NULL);
Ожидаемый результат является:
Stop | Route | Most common Next Stop | Frequency
101N 1 NULL 1
102N 1 101N 1
103N 1 102N 1
104N 1 103N 3
101N D NULL 1
102N D 101N 2
Использование HAVING пункта для агрегатной функции условия! – jarlh
Не могли бы вы выписать запрос :)? –
Как выглядит ваш текущий запрос? – jarlh