本文介绍了PostgreSQL:根据排序顺序仅选择每个ID的第一条记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于下面的查询,我只需要选择Shape_Type值最小的第一条记录(范围从1到10)。如果你有任何关于如何在PostgreSQL中轻松做到这一点的知识,请帮助。耽误您时间,实在对不起。

select g.geo_id, gs.shape_type
from schema.geo g   
join schema.geo_shape gs on (g.geo_id=gs.geo_id)  
order by gs.shape_type asc;

推荐答案

PostgreSQL为此类查询提供了非常好的语法-distinct on

因此您的查询变为:

select distinct on(g.geo_id)
    g.geo_id, gs.shape_type
from schema.geo g   
    join schema.geo_shape gs on (g.geo_id=gs.geo_id)  
order by g.geo_id, gs.shape_type asc;

通常(在任何具有窗口函数和公用表表达式的RDBMS中,可以切换为子查询)的ANSI-SQL语法为:

with cte as (
    select
        row_number() over(partition by g.geo_id order by gs.shape_type) as rn,
        g.geo_id, gs.shape_type
    from schema.geo g   
        join schema.geo_shape gs on (g.geo_id=gs.geo_id)  
)
select
    geo_id, shape_type
from cte
where rn = 1

这篇关于PostgreSQL:根据排序顺序仅选择每个ID的第一条记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-20 08:23