3

トピックが推測するので、リスト内のすべての電子メールを選択したいと思います。ただし、同じドメインのメールの数を制限してください。

私は500のGmailアドレスを持っているとしましょう。

そして、2つのexample.comアドレス。

.. 等々..

同じドメインの各アドレスを2つだけ取得したいと思います。

この文字列を使用すると、各ドメインで発生するドメインの数を選択できるため、この文字列を使用して何かを実行できる可能性があります。

SELECT substring_index(email, '@', -1), COUNT(*) FROM emaillist GROUP
BY substring_index(email, '@', -1);

助けてください!

4

2 に答える 2

2
SELECT ID, Email, SUBSTRING_INDEX(EMAIL, '@', -1) Domain
FROM   emaillist a
WHERE  
(
    SELECT  COUNT(*)
    FROM    emaillist e
    WHERE   SUBSTRING_INDEX(e.EMAIL, '@', -1) = SUBSTRING_INDEX(a.EMAIL, '@', -1) AND
            a.ID <= e.ID
) <= 2;

上記のクエリは を使用しませんINDEX。その結果、FULL TABLE SCANデータベースが非常に大きい場合、実行が遅くなり、クエリが遅くなります。

追加の列を作成することをお勧めします。そのINDEXための を定義する必要があります。

CREATE TABLE emaillist 
(
    ID INT AUTO_INCREMENT PRIMARY KEY,
    EMAIL VARCHAR(50) NOT NULL,
    DOMAIN VARCHAR(15) NOT NULL,
    KEY (DOMAIN)
)
于 2013-03-03T16:41:40.443 に答える
1
SELECT
  MIN(email) AS address1
  IF(MAX(email)==MIN(email),NULL,MAX(email)) AS address2
FROM emaillist
GROUP BY substring_index(email, '@', -1);

そして、それらを1つの列に入れたい場合

SELECT MIN(email) AS address1
FROM emaillist
GROUP BY substring_index(email, '@', -1)
UNION
SELECT MAX(email) AS address1
FROM emaillist
GROUP BY substring_index(email, '@', -1)
于 2013-03-03T16:36:26.067 に答える