【问题标题】:POSTGRES min/least valuePOSTGRES 最小值/最小值
【发布时间】:2016-01-12 01:23:24
【问题描述】:

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

如有任何帮助,我们将不胜感激并提前致谢。

【问题讨论】:

  • 我知道存在一个“最少”函数,但时间列中的每一行始终是该行中最少的。我正在寻找的是路线列和最少(时间)上的不同选择的组合......

标签: sql postgresql aggregate-functions postgresql-9.3 distinct-on


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:
    select distinct on(routes) routes
          ,times 
    from p 
    order by routes,times asc 
    

    DISTINCT ON

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

    根据文档。

    DISTINCT ON (表达式 [, ...] ) 只保留每个的第一行 给定表达式求值为相等的行集。 [...] 笔记 每个集合的“第一行”是不可预测的,除非 ORDER BY 是 用于确保所需的行首先出现。 [...] 不同的 ON 表达式必须匹配最左边的 ORDER BY 表达式。

    【讨论】:

      【解决方案3】:

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

      您可以使用 group by select routes, min(times) from your_table group by routes

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-09
        • 2021-12-23
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 2011-12-22
        相关资源
        最近更新 更多