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

DB2 SQL:如何筛选指定列唯一且另一指定列存在重复的行?

DB2 SQL查询:找出COL1唯一且COL3重复的行

嘿,作为DB2新手,咱们一步步来搞定这个需求~ 你要找的是COL1值在整张表里唯一没重复,同时对应的COL3值存在重复的行,就像示例里的148888和155555那两行对吧?

我给你两种写法,先从最容易理解的子查询版本开始:

方法1:使用子查询筛选

SELECT t.COL1, t.COL2, t.COL3
FROM YOUR_TABLE_NAME t
-- 筛选COL1只出现过一次的行
WHERE t.COL1 IN (
    SELECT COL1
    FROM YOUR_TABLE_NAME
    GROUP BY COL1
    HAVING COUNT(*) = 1
)
-- 同时筛选COL3出现过多次的行
AND t.COL3 IN (
    SELECT COL3
    FROM YOUR_TABLE_NAME
    GROUP BY COL3
    HAVING COUNT(*) > 1
);

拆解解释:

  • 第一个子查询:把表按COL1分组,只保留那些分组后数量为1的COL1值——这些就是唯一没有重复的COL1。
  • 第二个子查询:把表按COL3分组,保留分组后数量大于1的COL3值——这些就是存在重复的COL3。
  • 主查询把同时满足这两个条件的行捞出来,记得把YOUR_TABLE_NAME换成你实际的表名哦!

代入你的示例数据测试的话,第一个子查询会得到148888、147777、155555,第二个子查询得到34567、56789,两者的交集正好是你要的结果~

方法2:使用窗口函数(更高效)

如果你的表数据量比较大,窗口函数的写法会更高效,也更直观:

WITH stats AS (
    SELECT 
        COL1, COL2, COL3,
        -- 计算当前行的COL1在表中总共出现多少次
        COUNT(*) OVER (PARTITION BY COL1) AS col1_count,
        -- 计算当前行的COL3在表中总共出现多少次
        COUNT(*) OVER (PARTITION BY COL3) AS col3_count
    FROM YOUR_TABLE_NAME
)
SELECT COL1, COL2, COL3
FROM stats
WHERE col1_count = 1 AND col3_count > 1;

拆解解释:

  • 先用WITH创建一个临时的stats表,给每一行额外计算两个值:col1_count是当前COL1的总出现次数,col3_count是当前COL3的总出现次数。
  • 然后直接从临时表里筛选出col1_count=1(COL1唯一)且col3_count>1(COL3重复)的行就行啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:14:25