Oracle SQL包含要显示的列,而不将其添加到GROUP BY中

Oracle SQL包含要显示的列,而不将其添加到GROUP BY中,sql,oracle11g,group-by,case-insensitive,Sql,Oracle11g,Group By,Case Insensitive,我正在尝试在用户表中查找所有案例变体重复项: SELECT LOWER(EMAIL), COUNT(EMAIL) FROM USERS GROUP BY LOWER(EMAIL) HAVING COUNT (LOWER(EMAIL)) >= 3; 结果类似于: Emails Count (number of duplicates) bob@example.com 3 john.smith@example

我正在尝试在用户表中查找所有案例变体重复项:

SELECT LOWER(EMAIL), COUNT(EMAIL) 
    FROM USERS
    GROUP BY LOWER(EMAIL)
    HAVING COUNT (LOWER(EMAIL)) >= 3;
结果类似于:

Emails                   Count (number of duplicates)
bob@example.com          3   
john.smith@example.com   3 
blah@example.com         4 
james.smith@example.com  3 
问题是我需要每封电子邮件的ID,我如何才能做到这一点?我不能简单地将其添加到SELECT语句中,因为GROUP BY:

SELECT **ID**, LOWER(EMAIL), COUNT(EMAIL) 
    FROM USERS
    GROUP BY **ID**, LOWER(EMAIL)
    HAVING COUNT (LOWER(EMAIL)) >= 3;
上面会查找重复的电子邮件和ID,这不是我需要的。

试试这个:

SELECT U.*, COUNT(LOWER(EMAIL)) OVER (PARTITION BY (LOWER(EMAIL))) 
    FROM USERS U WHERE LOWER(EMAIL) IN (SELECT LOWER(EMAIL)
    FROM USERS
    GROUP BY LOWER(EMAIL)
    HAVING COUNT (LOWER(EMAIL)) >= 3);
试试这个:

SELECT U.*, COUNT(LOWER(EMAIL)) OVER (PARTITION BY (LOWER(EMAIL))) 
    FROM USERS U WHERE LOWER(EMAIL) IN (SELECT LOWER(EMAIL)
    FROM USERS
    GROUP BY LOWER(EMAIL)
    HAVING COUNT (LOWER(EMAIL)) >= 3);
您可以在内嵌视图中使用:

SELECT ID, EMAIL, LOWER(EMAIL), HOW_MANY
FROM (
  SELECT ID, EMAIL, COUNT(*) OVER (PARTITION BY LOWER(EMAIL)) AS HOW_MANY
  FROM USERS
)
WHERE HOW_MANY >= 3
ORDER BY ID;

        ID EMAIL                          LOWER(EMAIL)                     HOW_MANY
---------- ------------------------------ ------------------------------ ----------
         1 bob@example.com                bob@example.com                         3 
         2 Bob@example.com                bob@example.com                         3 
         3 BOB@example.com                bob@example.com                         3 
         4 john.smith@example.com         john.smith@example.com                  3 
         5 John.smith@example.com         john.smith@example.com                  3 
         6 JOHN.smith@example.com         john.smith@example.com                  3 
         7 blah@example.com               blah@example.com                        4 
         8 BLAH@example.com               blah@example.com                        4 
         9 blAH@example.com               blah@example.com                        4 
        10 BLah@example.com               blah@example.com                        4 
        11 james.smith@example.com        james.smith@example.com                 3 
        12 James.smith@example.com        james.smith@example.com                 3 
        13 JAMES.smith@example.com        james.smith@example.com                 3 
。分析的一个好处是,它只需在表中出现一次。

您可以在一个在线视图中使用:

SELECT ID, EMAIL, LOWER(EMAIL), HOW_MANY
FROM (
  SELECT ID, EMAIL, COUNT(*) OVER (PARTITION BY LOWER(EMAIL)) AS HOW_MANY
  FROM USERS
)
WHERE HOW_MANY >= 3
ORDER BY ID;

        ID EMAIL                          LOWER(EMAIL)                     HOW_MANY
---------- ------------------------------ ------------------------------ ----------
         1 bob@example.com                bob@example.com                         3 
         2 Bob@example.com                bob@example.com                         3 
         3 BOB@example.com                bob@example.com                         3 
         4 john.smith@example.com         john.smith@example.com                  3 
         5 John.smith@example.com         john.smith@example.com                  3 
         6 JOHN.smith@example.com         john.smith@example.com                  3 
         7 blah@example.com               blah@example.com                        4 
         8 BLAH@example.com               blah@example.com                        4 
         9 blAH@example.com               blah@example.com                        4 
        10 BLah@example.com               blah@example.com                        4 
        11 james.smith@example.com        james.smith@example.com                 3 
        12 James.smith@example.com        james.smith@example.com                 3 
        13 JAMES.smith@example.com        james.smith@example.com                 3 

。分析的一个好处是,它只需在表中显示一次。

我尝试过类似的查询,但问题是,我无法显示计数(电子邮件)。我尝试过类似的查询,但问题是,我无法显示计数(电子邮件)。哦,酷,我以前从未听说过这一点(我是新手)。给我一点时间试试。非常感谢,这是最好的答案。这也是一个快速的答案:)。使用大数据运行良好。您的SQL小提琴也非常有用。我感谢你的帮助!哦,太酷了,我以前从未听说过(我是这方面的新手)。给我一点时间试试。非常感谢,这是最好的答案。也很快:)。使用大数据运行良好。您的SQL小提琴也非常有用。我感谢你的帮助!