POSTGRES мин./наименьшее значение

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

Любая помощь будет оценена и спасибо заранее.


person Ang    schedule 12.01.2016    source источник
comment
Я знаю, что функция «наименьшего» существует, но каждая строка в столбце раз всегда будет наименьшей в этой строке. То, что я ищу, - это комбинация отдельного выбора в столбце маршрутов и наименьшего (времени)...   -  person Ang    schedule 12.01.2016


Ответы (3)


Это можно сделать с помощью MINагрегатной функции, а затем сгруппировать по столбцу Routes:

SELECT Routes, MIN(Times) FROM Table GROUP BY Routes

Предложение GROUP BY используется для группировки строк в одну строку, которая имеет одинаковое значение для полей, указанных в предложении GROUP BY. Затем вы можете использовать агрегатные функции, такие как MIN, MAX, SUM, AVG, ... для вычисления значений из строк, которые были сгруппированы вместе.

person ajshort    schedule 12.01.2016

Предложение GROUP BY полезно, когда оно используется в сочетании с агрегатной функцией. Для вашего вопроса, чтобы найти минимальное значение времени для всех входных значений для маршрутов, вы можете использовать предложение GROUP BY для разбивки на группы, и для каждой группы вы будете вычислять время, используя агрегированную функцию MIN.

Вы можете добиться этого, используя группу по select routes, min(times) from your_table group by routes

person PoX    schedule 12.01.2016

select distinct on(routes) routes
      ,times 
from p 
order by routes,times asc 

DISTINCT ON

Возвращает "первую" строку каждого набора строк, где выражение равно.

Согласно док.

DISTINCT ON ( выражение [, ...] ) сохраняет только первую строку каждого набора строк, где данные выражения оцениваются как равные. [...] Обратите внимание, что «первая строка» каждого набора непредсказуема, если только не используется ORDER BY, чтобы гарантировать, что желаемая строка появится первой. [...] Выражение (я) DISTINCT ON должно соответствовать самому левому выражению (ям) ORDER BY.

person Vivek S.    schedule 12.01.2016