我有一个包含两列的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
子句中指定的字段具有相同的值。然后可以使用聚合函数,如MIN
、MAX
、SUM
、AVG
。。。以根据已经分组在一起的行来计算值。
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