2016-09-19 19 views
0

私はデータベース内のどの電子メールプロバイダが最も人気があるかを特定するためのスクリプトを作成しています。 URLリンクはテーブルの名前で、 'contact_email'はリンクに関連付けられた連絡先メールアドレスです。MySQL Group By Count Substring

私は、次のMySQLのクエリに

SELECT 
url_links.contact_email,count(url_links.contact_email) 
FROM 
url_links 
group by contact_email order by count(url_links.contact_email) DESC 

を書いたこのクエリは、リストを提出した人の電子メールのすべてのカウントを返します。私がしたいのは、MySQLスクリプトを修正して、プロバイダ全体をカウントすることです。 Gmail.com、Yahoo.com、Hotmail.comなど

私はこの配列全体をPHPに読み込み、@記号で「爆発」してそのようにグループ化することができますが、私はコミュニティがこのスクリプトをどのように変更するかを知っているので、グループ内のGmail、Yahooなどのすべてのメールアドレスを返すようにカウントします。

Aka a 'Group By Substring'アイテムは「@」記号の後ろのすべてでグループ化されます。

ありがとうございます!

答えて

1

あなたがグループ化することができ、およびによってカウント:このような

right(url_links.contact_email, length(url_links.contact_email)-INSTR(url_links.contact_email, '@')) 

何か作業をする必要があります:

SELECT 
right(url_links.contact_email, length(url_links.contact_email)-INSTR(url_links.contact_email, '@')), count(right(url_links.contact_email, length(url_links.contact_email)-INSTR(url_links.contact_email, '@'))) 
FROM 
url_links 
group by right(url_links.contact_email, length(url_links.contact_email)-INSTR(url_links.contact_email, '@')) order by count(right(url_links.contact_email, length(url_links.contact_email)-INSTR(url_links.contact_email, '@'))) DESC 
+0

感謝セザールを。あなたのスクリプトを試しましたが、私のスクリプトと同じ出力を返しました。プロバイダごとに1つの結果ではなく、電子メールごとに1つの結果。 – Viktor

+0

こんにちはViktor、私は私の答えを更新しました、私は間違った "url_links.contact_email"フィールドでグループ化(そして選択)していました – Cesar

+0

それは働いた!私はあなたにボーナスの質問をすることができますか? 「パーセント」と呼ばれる追加のMySQLフィールドをどのように追加しますか?すなわち、データベース全体のフル・カウントを取り、それを特定のプロバイダの「リスト」のパーセンテージとして表します。 – Viktor