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

标签 mysql sql select group-by grouping

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

表名称=表1
MySQL数据库

例如: enter image description here

分数:
aa@aa.com
bb@aa.com
aa@example.com
抄送@example.com
a@domain.com

如您所见,查询应按域分组并仅显示每个域的最多两条记录

你能帮我吗?

最佳答案

MySQL 8.0.2 and above ,这个问题可以使用 Window Functions 来解决以更简洁的方式。

对于your MySQL version 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 Fiddle DEMO

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

关于mysql - 如何在MySQL数据库中按域分组并删除两个以上结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52967501/

相关文章:

java - 无法使 mysql 连接器 j 工作

sql - 如何从 SELECT AS 在 Oracle 11g R2 中创建表并按范围列表对表进行分区?

sql - 在 SELECT 中包含一个属性而不必在 GROUP BY 中包含它

sql - 如何使用 SQL Server 2008 中的函数生成字母数字随机数

mysql - 加速更新、内连接、日期之间、按 MySQL 查询分组

mysql - Elastic Search 中的表情符号 - 如何让它们可搜索

mysql - 是否可以在 mysql 中实现 2 个逗号分隔列表(通过 group_concat 获得)之间的包含检查?

java - 准备好的语句失败(带有错误消息!)

mysql - 在 MySQL 中使用数字行 ID 有什么优点?

html - 当边框在每个元素上为 0px,在选择上为 1px 时,Firefox 下拉箭头