2017-05-28 17 views
0

どの国コードが指定されているかにかかわらず、電子メールプロバイダの数をカウントするリストを作成します。 [email protected][email protected]はどちらもGmailの下にグループ化されます。2文字間の正確な文字列を選択できないSQLite3

私はsubstr()関数を使用していますが、 '@'と '。'の間では選択できません。 。

これは私のコードです:

SELECT SUBSTR(email, INSTR(email, '@')) AS 'Provider', COUNT(email) 
AS 'Count' 
    FROM Customer 
    GROUP BY Provider 
    ORDER BY Count DESC; 

と私の出力に含まは現在、次のようになります。

Provider Count 
---------- ---------- 
@gmail.com 8 
@hotmail.c 4 
@shaw.ca 3 
@aol.com 2 
@surfeu.de 2 
@uol.com.b 2 
@yahoo.com 2 
@yahoo.de 2 
@yahoo.fr 2 
@apple.at 1 
@apple.be 1 
@apple.com 1 
@apple.fi 1 
@apple.fr 1 
@apple.hu 1 
@apple.ie 1 
@comcast.c 1 
@embraer.c 1 
@google.co 1 
@jetbrains 1 
@jubii.dk 1 
@microsoft 1 
@rediff.co 1 
@riotur.go 1 
@rogers.ca 1 
@sapo.pt 1 
@woodstock 1 
@wp.pl  1 
@yachoo.ca 1 
@yahoo.ar 1 
@yahoo.au 1 
@yahoo.ca 1 
@yahoo.cl 1 
@yahoo.es 1 
@yahoo.in 1 
@yahoo.it 1 
@yahoo.nl 1 
@yahoo.no 1 
@yahoo.pt 1 
@yahoo.se 1 
@yahoo.uk 1 

がうまくいけば、これはあなたのアイデアを提供し、あなたは助けることができます! ありがとう

答えて

1

ここでのトリックは、INSTR()はいくらかの量ではオフセットできません。指定したものの最初の出現を返します。したがって、電子メールアドレスのドメイン部分の最初のドットの位置を見つけたいのに、の後にのアットマークが現れるため、これは問題です。以下のクエリで

、作業単位は、以下のサブストリングである:

SUBSTR(email, INSTR(email, '@') + 1) 

これは、シンボルの右側にあるすべてのものを見つけました。次に、この上にINSTR()を使用して、atシンボルと最初のドットの間のすべての部分文字列を返します。

SELECT 
    SUBSTR(SUBSTR(email, INSTR(email, '@') + 1), 
      1, 
      INSTR(SUBSTR(email, INSTR(email, '@') + 1), '.') - 1) AS Provider, 
    COUNT(*) AS p_count 
FROM Customer 
GROUP BY 
    SUBSTR(SUBSTR(email, INSTR(email, '@') + 1), 
      1, 
      INSTR(SUBSTR(email, INSTR(email, '@') + 1), '.') - 1) 
ORDER BY COUNT(*) DESC 

私はあなたにSQLiteのためのライブデモを提供することはできませんが、MySQLにINSTR()SUBSTR()機能はほとんど同じように動作し、そして上記のクエリは完全に移植できるように思えます。

クエリは少しクリーナーを表示したい場合は、あなたがGROUP BY句で醜い部分文字列操作の繰り返しを避けるために、サブクエリで包むことができます:

SELECT 
    t.Provider, COUNT(*) AS p_count 
FROM 
(
    SELECT 
     SUBSTR(SUBSTR(email, INSTR(email, '@') + 1), 
       1, 
       INSTR(SUBSTR(email, INSTR(email, '@') + 1), '.') - 1) AS Provider, 
    FROM Customer 
) t 
GROUP BY t.Provider 

Demo

関連する問題