Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 选择每个组的最大行数_Mysql - Fatal编程技术网

Mysql 选择每个组的最大行数

Mysql 选择每个组的最大行数,mysql,Mysql,我有一个简单的用户记录表。一个电子邮件地址允许有多个条目。我现在想创建一个查询,返回所有记录,但将重复条目的数量限制为一个设置的数字,例如每个电子邮件地址5个 我将使用此查询的最终结果创建一个新表 我唯一的想法是使用PHP并选择一个唯一的电子邮件地址列表,然后我会在循环中使用此列表查询表并将其限制为5,但我的表中有大约65k个唯一的电子邮件,总记录约284k行 有没有一种方法可以在MySQL中实现这一点 下面是表格结构 first_name, last_name, email John, smi

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

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

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

有没有一种方法可以在MySQL中实现这一点

下面是表格结构

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
希望这能更清楚一点

谢谢。

这样试试

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

这里是演示

您能展示一个示例数据以及您需要从中获得什么吗?使用多种解决方案中的一种来获取每组行数,然后仅选择带有行的行。您的表中是否有id列?是的,有id列。您是否尝试过选择DISTINCT?