POSTGRES min/least 值

POSTGRES min/least value

我有一个带有两列的 postgres 9.3 table。第一列有时间,第二列有路线。一条路线可能有多次。我想列出所有路线的最短时间。我的 table:

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 

如有任何帮助,我们将不胜感激,并在此先致谢。

GROUP BY 子句在与聚合函数结合使用时很有用。对于您的问题,要找到路径的所有输入值的最小时间值,您可以使用 GROUP BY 子句分成组,对于每个组,您将使用 MIN 聚合函数计算时间。

您可以使用 group by 实现此目的 select routes, min(times) from your_table group by routes

这可以使用 MIN aggregate function 完成,然后按 Routes 列分组:

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

GROUP BY 子句用于将行组合成一行,这些行具有与 GROUP BY 子句中指定的字段相同的值。然后,您可以使用 MINMAXSUMAVG 等聚合函数来计算分组在一起的行的值。

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

DISTINCT ON

将return“第一个”行中表达式相等的每组行。

根据文档

DISTINCT ON ( expression [, ...] ) keeps only the first row of each set of rows where the given expressions evaluate to equal. [...] Note that the "first row" of each set is unpredictable unless ORDER BY is used to ensure that the desired row appears first. [...] The DISTINCT ON expression(s) must match the leftmost ORDER BY expression(s).