我有一个问题,
我想对我的表格进行分组,并为每个域仅显示最多两个值(例如按字母顺序排列)。
表名称=表1
MySQL数据库
分数:
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/