ПОСТГРЕСС мин / наименьшее значение
У меня есть таблица postgres 9.3 с двумя столбцами. В первом столбце есть время, а во втором - маршруты. Маршрут может иметь несколько раз. Я хочу перечислить все маршруты с их минимальным временем. Мой стол:
Times Routes
07:15:00 Route a
09:15:00 Route a
08:15:00 Route b
11:30:00 Route b
09:15:00 Route c
12:00:00 Route c
Что я хочу вывод:
Times Routes
07:15:00 Route a
08:15:00 Route b
09:15:00 Route c
Любая помощь будет оценена и спасибо заранее.
3 ответа
Это можно сделать с помощью MIN
агрегатная функция, а затем группировка по Routes
колонка:
SELECT Routes, MIN(Times) FROM Table GROUP BY Routes
GROUP BY
Предложение используется для группировки строк в одну строку, имеющую одинаковое значение для полей, указанных в GROUP BY
пункт. Затем вы можете использовать агрегатные функции, такие как MIN
, MAX
, SUM
, AVG
,... чтобы вычислить значения из строк, которые были сгруппированы вместе.
select distinct on(routes) routes
,times
from p
order by routes,times asc
DISTINCT ON
Вернет " первую " строку каждого набора строк, где выражение равно.
Согласно док.
DISTINCT ON (выражение [, ...]) сохраняет только первую строку каждого набора строк, где заданные выражения оцениваются как равные. [...] Обратите внимание, что "первая строка" каждого набора непредсказуема, если только ORDER BY не используется, чтобы гарантировать, что желаемая строка появляется первой. [...] Выражение (я) DISTINCT ON должно соответствовать самому левому выражению ORDER BY.
GROUP BY
Предложение полезно, когда оно используется вместе с агрегатной функцией. По вашему вопросу, чтобы найти минимальное значение раз по всем входным значениям для маршрутов, вы можете использовать GROUP BY
разделить на группы и для каждой группы вы будете рассчитывать время, используя MIN
агрегатная функция.
Вы можете достичь этого с помощью группы select routes, min(times) from your_table group by routes