首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MySQL数据库中按域分组和删除两个以上的结果

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

Stack Overflow用户
提问于 2018-10-24 11:12:05
回答 1查看 93关注 0票数 0

我有个问题,

我想分组我的表,并只显示最大两个值(如字母硬),为每个领域。

表名= table1

MySQL数据库

例如:

​

评分:

aa@aa.com

bb@aa.com

aa@example.com

cc@example.com

a@domain.com

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

你能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-24 11:24:28

在MySQL 8.0.2及以上中,这个问题可以以较少冗长的方式使用窗口函数来解决。

对于您的MySQL版本5.1.73,我们可以使用会话变量进行仿真。

代码语言:javascript
复制
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演示

您可以按照本教程来了解这种方法的基本原理:编号/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52967501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档