ПОСТГРЕСС мин / наименьшее значение

У меня есть таблица 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

Другие вопросы по тегам