繁体   English   中英

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

[英]How to group by domain and delete more than two result in MySQL database

我有个问题,
我想对我的表进行分组,并为每个域仅显示MAX两个值(例如,按字母顺序硬)。

表名称= table1
MySQL数据库

例如: 在此处输入图片说明

得分:
aa@aa.com
bb@aa.com
aa@example.com
cc@example.com
a@domain.com

如您所见,查询应按域分组,并且每个域仅显示MAX TWO记录

你能帮助我吗?

MySQL 8.0.2及更高版本中 ,可以使用Window函数以不太冗长的方式解决此问题。

对于您的MySQL 5.1.73版本 ,我们可以使用Session Variables进行模拟:

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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM