MySQL Query для подсчета уникальных доменов из поля адреса электронной почты - PullRequest
31 голосов
/ 14 марта 2010

Я хотел бы получить более полное представление о том, какие домены используют мои клиенты. Я мог бы легко сделать это в PHP, набрав explode каждый адрес и посчитав таким образом домен. Но мне интересно, есть ли способ получить эту информацию простым запросом MySQL?

Вот как будет выглядеть пример вывода:

gmail.com | 3942

yahoo.com | 3852

hotmail.com | 209

... и т. Д., Где первый столбец - это домен адресов электронной почты, а 2-й столбец - количество адресов в этом домене.

Ответы [ 7 ]

78 голосов
/ 14 марта 2010

Вы должны сделать что-то вроде этого:

SELECT substring_index(email, '@', -1) domain, COUNT(*) email_count
FROM table
GROUP BY substring_index(email, '@', -1)

-- If you want to sort as well:
ORDER BY email_count DESC, domain;
2 голосов
/ 14 июня 2012

Добавление ORDER BY к ответу WoLpH делает вывод более ясным:

SELECT substring_index(email, '@', -1), COUNT(*) AS MyCount
FROM `database`.`table`
GROUP BY substring_index(email, '@', -1)
ORDER BY MyCount DESC;
1 голос
/ 07 июля 2016

Небольшой твик к оригиналу Вольфа, приведенному выше, чтобы немного сократить его, добавить красивое имя столбца и ограничить результаты в случае, если список длинен. Настройте предел по своему вкусу

select substring_index(email, '@', -1) AS domain, count(*) from TABLE group by domain order by count(*) DESC limit 40;
0 голосов
/ 20 октября 2016
SELECT 
    substring_index(email_address, '@', -1) AS Domain 
   ,COUNT(*) AS MyCount
FROM 
    database_name.table_name
GROUP BY 
    substring_index(email_address, '@', -1)
ORDER BY
    MyCount DESC
0 голосов
/ 19 января 2016

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

SELECT substr(email,INSTR(email,"@")+1),count(substr(email,INSTR(email,"@"))) from YOUR_TABLE group by substr(email,INSTR(email,"@"));
0 голосов
/ 27 ноября 2013
select distinct SUBSTRING(Email, CHARINDEX('@', Email) + 1,LEN(Email) - CHARINDEX ('@', Email)), Count(*) from Tbl_name
Group by SUBSTRING(Email, CHARINDEX('@', Email) + 1,LEN(Email) - CHARINDEX ('@', Email))
order by Count(*) desc
0 голосов
/ 14 марта 2010

Как насчет чего-то вроде

SELECT COUNT(DISTINCT [what you want])
FROM MyTable

COUNT (DISTINCT expr, [expr ...])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...