web-dev-qa-db-ja.com

メールアドレスフィールドから一意のドメインをカウントするMySQLクエリ

顧客がどのドメインを使用しているかについて、よりよく理解したいと思います。 PHP各アドレスをexplodeし、そのようにドメインを数えることで簡単にこれを行うことができます。しかし、単純なMySQLだけでこの情報を取得する方法があるかどうか疑問に思っています。クエリ?

サンプル出力は次のようになります。

gmail.com | 3942

yahoo.com | 3852

hotmail.com | 209

...など。最初の列は電子メールアドレスドメインで、2番目の列はそのドメインのアドレス数です。

34
Ian

あなたはこのようなことをしなければならないでしょう:

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;
86
Wolph

WoLpHの回答にORDERBYを追加すると、出力がより明確になります。

SELECT substring_index(email, '@', -1), COUNT(*) AS MyCount
FROM `database`.`table`
GROUP BY substring_index(email, '@', -1)
ORDER BY MyCount DESC;
3
Brad

上記のWolphのオリジナルを少し調整して、少し短くし、Nice列名を追加して、リストが長い場合に結果を制限します。自分の好みに合わせて制限を調整する

select substring_index(email, '@', -1) AS domain, count(*) from TABLE group by domain order by count(*) DESC limit 40;
1
Marc
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
user3041672

このクエリを使用して、テーブルからドメインの一意のカウントを取得できます。

SELECT substr(email,INSTR(email,"@")+1),count(substr(email,INSTR(email,"@"))) from YOUR_TABLE group by substr(email,INSTR(email,"@"));
0
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
oluwasegun