【问题标题】:How to group by domain and delete more than two result in MySQL database如何在 MySQL 数据库中按域分组并删除两个以上的结果
【发布时间】:2018-10-24 11:12:05
【问题描述】:

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

表名 = table1
MySQL 数据库

例如:

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

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

你能帮帮我吗?

【问题讨论】:

  • 你的 MySQL 服务器版本是多少?
  • 在我的服务器上我看到:5.1.73

标签: mysql sql select group-by grouping


【解决方案1】:

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/

【讨论】:

  • 几年后我又回到了这个脚本并想修改它。正如我在数据库中应用它后看到的那样,该脚本为域返回了两条以上的记录。我只希望为每个域返回两个电子邮件地址。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
  • 2023-04-01
  • 1970-01-01
  • 2022-01-15
  • 2010-11-23
  • 2014-03-30
  • 1970-01-01
相关资源
最近更新 更多