为了账号安全,请及时绑定邮箱和手机立即绑定

PostgreSQL中的分组限制:显示每组的前N行?

PostgreSQL中的分组限制:显示每组的前N行?

摇曳的蔷薇 2019-09-19 14:34:38
我需要为每个组取前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;


查看完整回答
反对 回复 2019-09-19
?
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


查看完整回答
反对 回复 2019-09-19
  • 3 回答
  • 0 关注
  • 864 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信