如何在mysql数据库中按域分组并删除两个以上的结果

jucafojl  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(404)

我有个问题,
我想对我的表进行分组,并为每个域显示最多两个值(如按字母顺序排列)。
表名=表1
mysql数据库
例如:

分数:
aa@aa.com
bb@aa.com
aa@example.com
cc@example.com
a@domain.com
如您所见,查询应该按域分组,并且每个域最多只显示两条记录
你能帮助我吗?

nmpmafwu

nmpmafwu1#

在MySQL8.0.2及更高版本中,这个问题可以通过使用窗口函数以一种不太冗长的方式来解决。
对于您的MySQL5.1.73版本,我们可以使用会话变量进行模拟:

SELECT 
  dt2.Email, 
  dt2.Domain 
FROM 
(
  SELECT 
    @row_num := IF(@dmn <> dt1.Domain, 1, @row_num + 1) AS row_no, 
    @dmn := dt1.Domain AS Domain, 
    dt1.Email 
  FROM 
  (
    SELECT 
      Email, 
      Domain 
    FROM Table1 
    ORDER BY Domain 
  ) AS dt1 
  CROSS JOIN (SELECT @row_num := 0, 
                     @dmn := '') AS user_init_vars 
) AS dt2 
WHERE dt2.row_no <= 2 
ORDER BY dt2.Domain

db小提琴演示

您可以按照本教程了解此方法的基本工作原理:http://www.mysqltutorial.org/mysql-row_number/

相关问题