正如主题所暗示的,我想选择列表中的所有电子邮件。但限制具有相同域的电子邮件数量。
假设我有 500 个 Gmail 地址。
还有 2 个 example.com 地址。
..等等..
I want to just grab 2 of each adress with the same domain.
有了这个字符串,我可以选择每个域上的域数量,所以也许我可以用这个字符串做一些事情。
SELECT substring_index(email, '@', -1), COUNT(*) FROM emaillist GROUP
BY substring_index(email, '@', -1);
请帮忙!
最佳答案
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)
)
关于MYSQL 如何从表中选择所有电子邮件但限制具有相同域的电子邮件数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15187839/