PostgreSQL如何筛选每位作者第三部出版作品的库存副本数量
PostgreSQL 实现方案
该需求完全可以通过SQL查询实现,借助PostgreSQL内置的窗口函数即可快速完成,具体实现如下:
核心SQL代码
WITH ranked_works AS ( SELECT author_id, title, number_of_copies, ROW_NUMBER() OVER ( PARTITION BY author_id ORDER BY published ASC, id ASC ) AS release_order FROM 实际表名 -- 替换为你的数据表名 ) SELECT author_id, title, number_of_copies FROM ranked_works WHERE release_order = 3;
逻辑说明
- 用
PARTITION BY author_id把所有作品按作者划分分组,每个作者的作品单独计算发布顺序 - 分组内的排序规则完全匹配需求:优先按
published出版年份升序排列,同一作者同年份发布的作品按id升序确定先后 - 窗口函数
ROW_NUMBER()会为每个分组内的记录生成连续的序号,筛选序号等于3的记录,就是对应作者的第三部发布作品
如果你需要对最终返回的结果再做排序,可以在查询末尾追加ORDER BY子句自定义排序规则即可。
内容的提问来源于stack exchange,提问作者Hex4Bin
相关产品推荐
相关产品推荐

