2

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

任何帮助都会得到帮助,并提前致谢。

4

3 回答 3

2

这可以使用MIN聚合函数来完成,然后按Routes列分组:

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

GROUP BY子句用于将行组合成一行,这些行对于GROUP BY子句中指定的字段具有相同的值。然后,您可以使用聚合函数(例如MIN, MAX, SUM, AVG, ...)从已分组在一起的行中计算值。

于 2016-01-12T01:43:49.470 回答
2
select distinct on(routes) routes
      ,times 
from p 
order by routes,times asc 

DISTINCT ON

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

根据文档。

DISTINCT ON ( 表达式 [, ...] ) 仅保留给定表达式计算结果为相等的每组行的第一行。[...] 请注意,除非使用 ORDER BY 来确保所需的行首先出现,否则每组的“第一行”是不可预测的。[...] DISTINCT ON 表达式必须匹配最左边的 ORDER BY 表达式。

于 2016-01-12T04:58:14.467 回答
1

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

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

于 2016-01-12T01:36:58.750 回答