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)
,但没有子查询。
答案 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