You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL DISTINCT ON示例:基于多列条件选取分组中的一行

实用PostgreSQL命令示例:DISTINCT ON

我想分享一个非常实用的PostgreSQL命令示例:DISTINCT ON。

我的数据来自USDA SSURGO土壤数据集,需求很明确:针对每个mukey,优先选取majcompflag为Yes且comppct_r值最高的cokey;如果没有majcompflag为Yes的记录,就选comppct_r值最大的cokey;要是符合条件的cokey不唯一,随便选一个就行。下面是一小段数据示例:

一开始我写了一堆复杂的子查询,结果还是覆盖不全所有情况,直到发现了简单高效的DISTINCT ON命令。

DISTINCT ON会按指定字段分组,对每组内的条目按排序条件排列,然后直接取第一条。用它来实现我的需求,查询语句可以简化成这样:

SELECT DISTINCT ON (mukey) mukey,cokey,majcompflag,comppct_r
FROM component
ORDER BY mukey,majcompflag DESC,comppct_r DESC
mukeycokeymajcompflagcomppct_r
102031523068517No10
102031523068518No10
102031523068519No5
102031523068520Yes70
102031523068521No2
102031523068522No3
102031623068807No3
102031623068808No5
102031623068809No2
102031623068810No6
102031623068811No3
102031623068812No6
102031623068813Yes75

内容的提问来源于stack exchange,提问作者brendan8229

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 18:43:19