pgsql 中,根据字段分组且每一组只获取一条记录
pgsql 中,表 t1 有多个字段 a1 a2 a3,相同a1 的值只查询一条数据
一、方法1 —使用 ROW_NUMBER()
窗口函数
SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY a1 ORDER BY a2) AS rn FROM t1 ) subquery WHERE rn = 1;
二、方法2 — 使用 DISTINCT ON
(简洁高效)
SELECT DISTINCT ON (a1) * FROM t1 ORDER BY a1, a2; -- 先按 a1 分组,再按 a2 排序取第一条
三、方法3 — 使用 GROUP BY
和聚合函数
若你只需要部分字段,可通过 GROUP BY
结合聚合函数来实现。
SELECT a1, MAX(a2) AS a2, -- 选择每组中的最大值,可按需替换为其他聚合函数 MAX(a3) AS a3 FROM t1 GROUP BY a1;
四、使用 LATERAL
子查询
通过 LATERAL
子查询,为每个 a1
值动态关联匹配的记录。
SELECT t.* FROM (SELECT DISTINCT a1 FROM t1) AS d LATERAL ( SELECT * FROM t1 WHERE a1 = d.a1 ORDER BY a2 LIMIT 1 ) t;
五、选择建议
让每一天过的有意义!