mysql - 如何在 MySQL 数据库中按域分组并删除两个以上的结果
问题描述
我有一个问题,
我想对我的表进行分组,并为每个域仅显示 MAX 两个值(例如,按字母顺序排列)。
表名 = table1
MySQL 数据库
得分:
aa@aa.com
bb@aa.com
aa@example.com
cc@example.com
a@domain.com
如您所见,查询应按域分组,并且每个域仅显示MAX TWO记录
你能帮助我吗?
解决方案
在MySQL 8.0.2 及更高版本中,可以使用窗口函数以不那么冗长的方式解决此问题。
对于您的 MySQL 5.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/
推荐阅读
- angularjs - bootstrap-ui-datetime-picker 未在输入字段中显示预选日期
- html - CSS中带有em单位的响应宽度
- regex - Replace \s with \s, (space + coma) between to strings in a text file
- github-desktop - How to "Open in Git Bash" in Github Desktop
- matlab - 尽管有惩罚,鲸鱼优化算法中没有满足等式约束
- javascript - 如何避免 tr 内的分页符?
- typescript - Type 'Type1 | Type2' is not asignable to type 'Type1'
- node.js - Nodemailer - 从不同的 gmail 帐户发送
- javascript - Ugly bootstrap datepicker
- r - 使用 echo = {number} 删除 R Notebooks 中的代码切换