POSTGRES min/least value



我有一个包含两列的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 

任何帮助都会提前通知并表示感谢。

这可以使用MIN聚合函数完成,然后按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

将返回表达式相等的每组行的"第一行"。

根据文件。

DISTINCT ON(表达式[,…])只保留每个给定表达式计算为相等的一组行。[…]注意每个集合的"第一行"是不可预测的,除非ORDER BY用于确保所需行首先出现。[…]与众不同ON表达式必须与最左边的ORDER BY表达式匹配。

GROUP BY子句与聚合函数一起使用时非常有用。对于您的问题,要在路由的所有输入值中找到最小时间值,您可以使用GROUP BY子句来分组,对于每个组,您将使用MIN聚合函数来计算时间。

您可以通过以下方式使用组来实现这一点select routes, min(times) from your_table group by routes

最新更新