我需要为每个组取前N行,按自定义列排序。鉴于下表:db=# SELECT * FROM xxx; id | section_id | name----+------------+------ 1 | 1 | A 2 | 1 | B 3 | 1 | C 4 | 1 | D 5 | 2 | E 6 | 2 | F 7 | 3 | G 8 | 2 | H(8 rows)我需要每个section_id的前2行(按名称排序),即类似于的结果: id | section_id | name----+------------+------ 1 | 1 | A 2 | 1 | B 5 | 2 | E 6 | 2 | F 7 | 3 | G(5 rows)我正在使用PostgreSQL 8.3.5。
3 回答
富国沪深
TA贡献1790条经验 获得超9个赞
新解决方案(PostgreSQL 8.4)
SELECT
*
FROM (
SELECT
ROW_NUMBER() OVER (PARTITION BY section_id ORDER BY name) AS r,
t.*
FROM
xxx t) x
WHERE
x.r <= 2;
POPMUISE
TA贡献1765条经验 获得超5个赞
这是另一个解决方案(PostgreSQL <= 8.3)。
SELECT
*
FROM
xxx a
WHERE (
SELECT
COUNT(*)
FROM
xxx
WHERE
section_id = a.section_id
AND
name <= a.name
) <= 2
添加回答
举报
0/150
提交
取消