【问题标题】:duplicates in oracle queryoracle查询中的重复项
【发布时间】:2021-10-14 00:03:28
【问题描述】:

我有以下查询来获取重复的 ssn 和重复的计数。但是同一张表中不同的 login_id 使用相同的 ssn 是有可能的。

Select distinct SOCIALSECURITY, count(*) from PROCESS 
WHERE SOCIALSECURITY IS NOT NULL and PROCESS_NAME = 'NEW_ACCOUNT'
GROUP BY SOCIALSECURITY HAVING COUNT(SOCIALSECURITY) > 1;

我正在寻找的是获取使用相同 SOCIALSECURITY 的 Login_id 以及它使用了多少次。

例如:LOGIN_ID、SSN、PROCESS_NAME

john123 | 123-45-7890 | 'NEW_ACCOUNT'
john123 | 123-45-7890 | 'NEW_BUSINESS'
johnbaker123 | 123-45-7890 | 'NEW_ACCOUNT'
zeechan | 647-000-0000 | 'NEW_ACCOUNT'

我想得到类似的结果

123-45-7890 | 2

【问题讨论】:

  • 如果您在查询中使用条件and PROCESS_NAME = 'NEW_ACCOUNT',对于相同的LOGINID,您永远无法获得123-45-7890 | 2 的结果。您确定必须在查询中使用此条件吗?

标签: mysql oracle


【解决方案1】:

您可以使用以下查询 -

SELECT SOCIALSECURITY, count(*)
  FROM PROCESS 
 WHERE SOCIALSECURITY IS NOT NULL
   AND PROCESS_NAME = 'NEW_ACCOUNT'
 GROUP BY LOGIN_ID, SOCIALSECURITY
HAVING COUNT(SOCIALSECURITY) > 1;

【讨论】:

  • 这个查询返回所有重复的 SOCIALSECURITY 但不是像我想要的那样同时返回 SOCIALSECURITY 和 login_id..
【解决方案2】:

我看到的是count(distinct login_id)你在找。

SQL> with test (login_id, ssn, process_name) as
  2    (select 'john123'     , '123-45-7890', 'NEW_ACCOUNT'  from dual union all
  3     select 'john123'     , '123-45-7890', 'NEW_BUSINESS' from dual union all
  4     select 'johnbaker123', '123-45-7890', 'NEW_ACCOUNT'  from dual union all
  5     select 'zeechan'     , '647-00-0000', 'NEW_ACCOUNT'  from dual
  6    )
  7  select ssn, count(distinct login_id) cnt
  8  from test
  9  group by ssn
 10  having count(*) > 1;

SSN                CNT
----------- ----------
123-45-7890          2

SQL>

【讨论】:

  • 是的,我以不同的方式得到了我需要的东西。此查询也返回具有 1 个 login_id 的相同 ssn 的用户,而不仅仅是具有 1 个 login_id 的 ssn。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-31
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
  • 2013-07-27
  • 1970-01-01
相关资源
最近更新 更多