СЧИТАЙТЕ дубликаты электронных писем и показывать счет, игнорируя регистр - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть таблица с дублирующимися электронными письмами, которая выглядит следующим образом

email
-------------------
parrick01@yahoocom
johnsmith@gmailcom 
annabella@gmailcom
JohnSmith@gmailcom
johnsmith@gmailcom
JOHNSMITH@gmailcom
ANNABELLA@gmailcom
patrick12@gmailcom

Самое близкое, что я могу придумать, это:

SELECT
    a.email as 'email',
    z.email_count
FROM
    customer a
    LEFT JOIN (
        SELECT
            email as email,
            count(lower(email)) AS email_count
        FROM
            customer
        GROUP BY
            email
    ) z on a.email = z.email

, которая выдала бы результаты примерно так :

email               | email_count
---------------------------------
parrick01@yahoocom | 1
johnsmith@gmailcom | 1
annabella@gmailcom | 1
JohnSmith@gmailcom | 1
johnsmith@gmailcom | 1
JOHNSMITH@gmailcom | 1
ANNABELLA@gmailcom | 1
patrick12@gmailcom | 1

Я хочу показать только дубликаты электронных писем, например:

email               | email_count
---------------------------------
johnsmith@gmailcom | 4
annabella@gmailcom | 2
JohnSmith@gmailcom | 4
johnsmith@gmailcom | 4
JOHNSMITH@gmailcom | 4
ANNABELLA@gmailcom | 2

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Вы можете использовать оконную функцию

select 
  email, count(*) over (partition by lower(email)) email_count
from t
0 голосов
/ 28 апреля 2020

Вы можете использовать табличное выражение для предварительного вычисления количества дубликатов электронной почты.

Например:

select
  a.email,
  b.email_count
from customer a
join (
  select lower(email) as lower_email, count(*) as email_count
  from customer
  group by lower(email)
) b on lower(a.email) = b.lower_email
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...