【问题标题】:How to select rows where the value in one column doesn't have any duplicates (i.e DISTINCT) AND the value in a different column does, IN SQL?如何在 SQL 中选择一列中的值没有任何重复项(即 DISTINCT)并且另一列中的值没有任何重复项的行?
【发布时间】:2019-11-28 15:31:20
【问题描述】:

这是在 DB2 中。 我想编写查询结果,其中一个指定列中的值是 DISTINCT 但第二列中的值也不是不同的。

这是一个示例数据集:

COL1     COL2          COL3
149999      Y          34567
149999      N          34567
148888      N          34567
147777      N          45678
156666      Y          56789
156666      N          56789
155555      N          56789

假设 COL1 是我想要区分的列,而 COL3 是我想要重复的列。

然后我需要的查询将给出以下结果:

COL1        COL2         COL3
148888      N            34567
155555      N            56789

因为 COL1 在这些行中是唯一的,但 COL3 不是

对不起,如果我解释得不好,我是 SQL/DB2 的初学者

【问题讨论】:

  • 我认为您的意思是第一段中的第三列。

标签: sql db2 ibm-data-studio


【解决方案1】:

如果由于某种原因您不想使用窗口函数。

SELECT * 
  FROM TABLE_1
 WHERE EXISTS -- unique field
         ( SELECT 1
             FROM TABLE_1 T2
            WHERE T1.Field2 = T2.Field2
            GROUP
               BY T2.Field2
           HAVING COUNT(1) = 1
         )
   AND EXISTS -- nonunique field
         ( SELECT 1
             FROM TABLE_1 T3
            WHERE T1.Field3 = T3.Field3
            GROUP
               BY T3.Field3
           HAVING COUNT(1) > 1
         )

【讨论】:

    【解决方案2】:

    窗口函数是一种方法:

    select t.*
    from (select t.*,
                 count(*) over (partition by col1) as cnt_col1,
                 count(*) over (partition by col3) as cnt_col3
          from t
         ) t
    where cnt_col1 = 1 and cnt_col3 > 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 2021-10-02
      • 1970-01-01
      相关资源
      最近更新 更多