PostgreSQL如何编写查询实现类似Excel的重复值仅首行展示效果
PostgreSQL实现重复分组字段仅首行展示的查询方案
你需要的效果可以通过窗口函数+条件判断实现,核心思路是给同组的行编序号,仅序号为1的行返回分组字段原值,其余行返回空值,具体SQL如下:
SELECT c_id, -- 仅组内第一行展示n_id CASE WHEN row_num = 1 THEN n_id ELSE NULL END AS n_id, -- 仅组内第一行展示b_id CASE WHEN row_num = 1 THEN b_id ELSE NULL END AS b_id FROM ( SELECT c_id, n_id, b_id, -- 按n_id、b_id分组,组内按c_id降序排序后编号,可根据业务调整排序规则 ROW_NUMBER() OVER (PARTITION BY n_id, b_id ORDER BY c_id DESC) AS row_num FROM data_test ) AS temp -- 最终结果排序可根据业务需求调整 ORDER BY n_id DESC, c_id DESC;
逻辑说明
- 内层子查询使用
PARTITION BY将n_id、b_id取值完全相同的行归为同一分组,你可以根据实际业务需求调整分组字段 ROW_NUMBER()会给每个分组内的行按ORDER BY指定的规则生成从1开始的连续序号,可更换排序字段匹配业务排序规则- 外层查询通过
CASE判断,只有组内序号为1的行才返回n_id、b_id的原值,其余行返回空值,即可实现和Excel一致的仅首行展示重复值的效果
内容的提问来源于stack exchange,提问作者菜合馍馍
相关产品推荐
相关产品推荐

