Ответ 1
Вам нужно было бы сделать что-то вроде этого:
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;
Я хотел бы получить представление о том, какие области используют мои клиенты. Я мог бы легко сделать это на PHP с помощью explode
каждого адреса и подсчета домена таким образом. Но мне интересно, есть ли способ получить эту информацию только с простым MySQL-запросом?
Это будет выглядеть так:
gmail.com | 3942
yahoo.com | 3852
hotmail.com | 209
... и т.д., где первый столбец является доменом адресов электронной почты, а второй столбец - количеством адресов в этом домене.
Вам нужно было бы сделать что-то вроде этого:
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;
Добавление ответа ORDER BY на WoLpH делает вывод более ясным:
SELECT substring_index(email, '@', -1), COUNT(*) AS MyCount
FROM `database`.`table`
GROUP BY substring_index(email, '@', -1)
ORDER BY MyCount DESC;
Небольшая настройка для оригинала Wolph выше, чтобы немного сократить и добавить хорошее имя столбца и ограничить результаты в списке событий длинным. Отрегулируйте ограничение по своему усмотрению
select substring_index(email, '@', -1) AS domain, count(*) from TABLE group by domain order by count(*) DESC limit 40;
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
Вы можете использовать этот запрос, чтобы получить уникальный счет домена из таблицы.
SELECT substr(email,INSTR(email,"@")+1),count(substr(email,INSTR(email,"@"))) from YOUR_TABLE group by substr(email,INSTR(email,"@"));
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
Как насчет чего-то вроде
SELECT COUNT(DISTINCT [what you want])
FROM MyTable