SQL如何按col1分组获取col2与非自身值的唯一组合
解决方案
核心逻辑
你之前自连接出现重复的核心原因是用了col2 != col2的双向不等条件,会同时生成(a,b)和(b,a)两条重复组合。改用单向不等比较即可解决:
- 第一步先对原表按
col1、col2去重,避免同组重复值生成冗余组合 - 对去重后的结果做自连接,连接条件限定同
col1分组、左表col2大于右表col2,既排除自身配对,也保证每对组合仅返回一次 - 自动过滤掉仅含1个唯一
col2值的分组(比如示例中col1=2的分组)
通用SQL实现(支持所有关系型数据库)
WITH distinct_col AS ( -- 先取每个分组下的唯一col2值 SELECT DISTINCT col1, col2 FROM 你的表名 ) SELECT t1.col1, t1.col2, t2.col2 AS col2_combo FROM distinct_col t1 INNER JOIN distinct_col t2 ON t1.col1 = t2.col1 AND t1.col2 > t2.col2 -- 核心条件:单向不等避免重复组合 -- 加上排序可以和你给出的期望输出顺序完全匹配 ORDER BY t1.col1, t1.col2 DESC, t2.col2 DESC;
如果需要调整组合的前后顺序(比如让更小的值放在col2列),只需要把连接条件改成t1.col2 < t2.col2即可,不影响组合的唯一性。
内容的提问来源于stack exchange,提问作者romborimba
相关产品推荐
相关产品推荐

