PostgreSQL由N个组限制

时间:2019-03-21 10:39:52

标签: postgresql

create table t (a integer, b text);
insert into t values (1, 'a'), (2, 'a'), (3, 'a'), (10, 'b'), (11, 'b'), (0, 'c');

我需要限制选择列 b (1-a,2-b)的前2组;

select * from t order by b;
 a  | b 
----+---
  1 | a
  2 | a
  3 | a
 10 | b
 11 | b
 -- limit here
  0 | c
(6 rows)

类似where b in (select distinct(b) from t order by b limit 2),但没有子查询。

1 个答案:

答案 0 :(得分:1)

您可以使用诸如density_rank之类的Windows功能:

select *,dense_rank()  over (order by  b) group_number from t order by b

因此您可以:

select * from (
    select *,dense_rank() over (order by  b) group_number  from t order by b
) a where group_number<=2