今天接到一个需求,要求按照某几个字段分组,每个分组提取 10 条数据,百度了一下,大部分文章介绍的都是一下这种方法:
select * from emp as a where 10> (select count(*) from emp where deptno = a.deptno and sal < a.sal ) order by a.deptno ,a.sal
以上方法我没有测试出来,但是在继续搜索中得知,mysql8 之后可以使用 PARTITION BY
语法,所以换用以下方式成功提取到数据:
SELECT a.* FROM (SELECT *, row_number() over (PARTITION BY deptno, sal) AS num FROM emp ) a WHERE a.num <= 10
via:
mysql8 分组后随机取 n 条数据 - 膨胀的面包
https://blog.wangtwothree.com/code/145.html
mysql 每个分类取5条_MySQL:如何查询出每个分组中的 top n 条记录?_weixin_39730284的博客-优快云博客
https://blog.youkuaiyun.com/weixin_39730284/article/details/110587189
MySQL 分组后取每组前N条数据 - duyunchao - 博客园
https://www.cnblogs.com/duyunchao-2261/p/7460294.html