如何获取源数据中属于多个组的RM_ID个值?

我的表中有两列:RM_IDGroup,数据如下:

RM_ID GROUP
100 DEF
100 DEF
200 ABC
200 ABC
200 DEF
300 XYZ
300 XYZ
300 ABC
400 PQR
400 PQR
  • 我想要识别属于多个组的所有RM_ID人,并检索这些组的名称.

  • 我如何在Oracle中实现这一点?

    • LEAD/LAG功能在这里会有帮助吗?

预期结果:

RM_ID GROUP
200 ABC
200 DEF
300 XYZ
300 ABC

推荐答案

您可以通过几个步骤完成这项工作.我会用一些CTE让它更清楚.

首先获取不同的值对,然后使用窗口函数计算每个RM_ID的组数,然后 Select 具有1个以上组的记录.

WITH DISTINCT_PAIRS AS (
  SELECT DISTINCT
    RM_ID, 
    GROUP_
  FROM YOUR_TABLE), 

GROUP_COUNTER AS (
  SELECT 
    RM_ID, 
    GROUP_, 
    COUNT(1) OVER (PARTITION BY RM_ID) AS NO_OF_UNIQUE_GROUPS
  FROM DISTINCT_PAIRS
)

SELECT 
  RM_ID, 
  GROUP_
FROM GROUP_COUNTER 
WHERE NO_OF_UNIQUE_GROUPS > 1

或者,您也可以这样做,稍微不那么冗长:

SELECT DISTINCT
  RM_ID, 
  GROUP_
FROM YOUR_TABLE
WHERE RM_ID IN (
  SELECT 
    RM_ID
  FROM YOUR_TABLE
  GROUP BY RM_ID
  HAVING COUNT(DISTINCT GROUP_) > 1
)

Sql相关问答推荐

GROUP BY和GROUP_CONCAT用于计算比赛排名

将有界时间周期作为阶跃函数,其中周期开始返回1,周期结束返回0

当我们加入两个表时,我们可以省略GROUP BY中的列名吗?

在SQL中使用类别值将行转置为列

如何更新SQLite数据库中的表?

SQL:如何查找聚合满足条件的连续日期

在SQL Server中设置关联对象的有效JSON格式

重用传递给 node 的参数-postgres upsert查询

将FLOAT转换为VARBINARY,然后再转换回FLOAT

将一个数组反嵌套到另外两个数组SQL中(Athena/presto)

了解多个分组集

比较SQL中以逗号分隔的字符串

如何在AWS Athena中 Select JSON数组的最后一个元素?

如何为缺少的类别添加行

将用户授予另一个用户不授予权限

如何在MS Access中基于另外两个表自动填充一个表中的字段?

如何在 SQL Server 中解决这个复杂的窗口查询?

当我返回 sql 列时,有没有办法只反转数字? ( hebrew )

SELECT 用于 Parent、Children 和 ORDER BY [Order] 列

面对来自以下两个代码的不同输出