当主题sugests我想要选择列表中的所有电子邮件。但是限制具有相同域的电子邮件数量。
假设我有500封gmail地址。
并且有2个example.com的地址。
..等等..
我想用同一个域抓取每个地址中的2个。
使用此字符串,我可以选择每个域上苛刻的域数,因此我可以使用此字符串执行某些操作。
SELECT substring_index(email, '@', -1), COUNT(*) FROM emaillist GROUP
BY substring_index(email, '@', -1);
请帮忙!
答案 0 :(得分: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)
)
答案 1 :(得分:1)
SELECT
MIN(email) AS address1
IF(MAX(email)==MIN(email),NULL,MAX(email)) AS address2
FROM emaillist
GROUP BY substring_index(email, '@', -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)