选择每组的最大行数

时间:2013-12-10 01:54:26

标签: mysql

我有一个简单的用户记录表。允许一个电子邮件地址有多个条目。我现在想要创建一个将返回所有记录的查询,但将重复条目的数量限制为一组数字,例如每个电子邮件地址5个。

我将使用此查询的最终结果来创建新表。

我唯一想到的是使用PHP并选择一个唯一的电子邮件地址列表,然后我会在循环中使用此列表来查询表并将其限制为5,但我在表中有大约65,000个独特的电子邮件,总记录约284k行。

我有没有办法在MySQL中完成这项工作?

HERE是表结构。

first_name, last_name, email
John, smith, js@email.com
john, smith, js@email.com
John, smith, js@email.com
john, smith, js@email.com
Jane, smith, jbs@email.com
jane, smith, jbs@email.com
Jane, smith, jbs@email.com
john, smith, js@email.com

我想获得一个返回相同记录的查询,但将重复项限制为我可以更改的参数。在上面的例子中,假设允许最多2个重复。我想得到

first_name, last_name, email
John, smith, js@email.com
john, smith, js@email.com
Jane, smith, jbs@email.com
jane, smith, jbs@email.com

希望这可以澄清一点。

感谢。

1 个答案:

答案 0 :(得分:0)

以这种方式试试

SELECT user_id, first_name, last_name, email
  FROM
(
  SELECT user_id, first_name, last_name, email,
  (
    SELECT 1 + COUNT(*)
      FROM users
     WHERE email = u.email
       AND user_id < u.user_id
  ) rnum     
    FROM users u
) q
 WHERE rnum <= 2 -- change 2 to a number of duplicates you need
 ORDER BY email, user_id

这是 SQLFiddle 演示