如何优雅的获取每个分组的前几条数据

Posted 沛沛老爹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何优雅的获取每个分组的前几条数据相关的知识,希望对你有一定的参考价值。

背景

最近在改一个功能时,发现有个需要获取每个问题回答的前3条的最优回复内容。

然后组合成list。返回给到前端。

大家可能觉得这个比较简单,找出所有的来,然后一个for循环,解决完事。

但是作为有理想的,装逼的程序员,我们怎么能做这样的操作?

解决方案

一、使用mysql解决

这个方案网上比较常见。

SQL贴上

select media_id from article a
where  3>=(select count(1) from article where `status`=1 and media_id=a.media_id and hot_num > a.hot_num)
 order by a.media_id,id desc;

二、使用stream的groupBy解决

Map<String, List<Article>> map = list.stream()
                .collect(Collectors.groupingBy(Article::getMediaId,
                        Collectors.collectingAndThen(Collectors.toList(),
                                list2 -> list2.stream().sorted(Comparator.comparing(Article::getHdNum, Comparator.reverseOrder())).limit(3).collect(Collectors.toList()))));

 

总结

第二种方式中查询的数据有点大,建议还是用第一种好点。

以上是关于如何优雅的获取每个分组的前几条数据的主要内容,如果未能解决你的问题,请参考以下文章

sql取出每个分组的前几条

MySQL每个分类的前几条记录

如何在MySQL中查询每个分组的前几名

SQL实现分组查询取前几条记录

SQL中显示查询结果的前几条记录

SQL中显示查询结果的前几条记录