我写了一个查询如下:
SELECT COUNT(*) AS count, email
FROM sometable
GROUP BY email
ORDER BY count DESC
LIMIT 4
我有兴趣看到表格中四个最重复的电子邮件条目。到目前为止,它似乎正好返回我想要的东西:
count email
12 very-duplicated@email.com
2 duped-twice@email.com
2 also-twice@email.com
1 single@email.com
当我不使用LIMIT
时,我得到相同的结果(尽管有更多行的count = 1)。我想知道的是LIMIT
。将来,当数字发生变化时,我上面的查询是否仍然会返回最常用的四封电子邮件?或者查询是否需要扫描整个数据库才能保持准确?
(注意:我不是要防止重复,我正在尝试查看最常用的电子邮件。)
答案 0 :(得分:2)
我不确定。但是如果您担心,可以对子查询应用限制:
select *
from
(
SELECT COUNT(*) AS count, email
FROM sometable
GROUP BY email
ORDER BY count DESC
)
limit 4
或者,您可以执行以下操作以查看所有重复的电子邮件地址(可能返回多于或少于4):
SELECT COUNT(*) AS count, email
FROM sometable
GROUP BY email
having COUNT(email) > 1
ORDER BY count DESC
答案 1 :(得分:2)
首先,查询不仅会返回重复的条目。看第四行,表示count = 1,这意味着它只在表中出现一次。要列出需要修改查询的重复记录 -
SELECT COUNT(*) AS count, email
FROM sometable
GROUP BY email
HAVING COUNT(*) > 1
ORDER BY count DESC
LIMIT 4
然后,这将始终返回您表中提到的4个最重复的条目。