首页 新闻 会员 周边 捐助

mysql group分组之后可以取其前N条数据吗?

0
[已解决问题] 解决于 2019-12-02 13:11

mysql group分组之后可以取其前N条数据吗?

问题补充:

因为涉及的表的数据量较大,如果使用两张表进行内连接的话,将会是一个非常巨大的工作量,查询速度将非常缓慢...

Mr_伍先生的主页 Mr_伍先生 | 初学一级 | 园豆:6
提问于:2019-11-02 17:32
< >
分享
最佳答案
0

如果数据量比较小的话,可以使用SQL内连接进行实现;
数据量比较大的时候,这种方法就消耗资源就比较大,不推荐

Mr_伍先生 | 初学一级 |园豆:6 | 2019-12-02 13:09
其他回答(3)
0

当然可以;
eg:获取根据name分组的前10条A/B表的关联数据;
select * from A a join B b on a.id = b.aid group by a.name limit 0,10;
数据量大的话,可以尽量查询需要的字段,替代*。外键索引、组合索引、或者分库分表来解决。

Ctrl` | 园豆:3317 (老鸟四级) | 2019-11-04 09:04

如果我没有理解错的话,你上面给出的例子,只能够做到总的显示10条数据,但是如果我的需求是每个分组10条数据呢?

支持(0) 反对(1) Mr_伍先生 | 园豆:6 (初学一级) | 2019-11-04 09:37

@Mr_伍先生: 你的最后一句没看懂、似乎跟上面问题有点不一致。

支持(0) 反对(0) Ctrl` | 园豆:3317 (老鸟四级) | 2019-11-04 09:55

@Ctrl`: 那我重新描述一下,假如一个表中有一个属性字段,我们按照这个属性字段分组,每组里面取前三条数据。

比如,有一张统计人身高的表,中间有年龄(17/18/19/20)、身高,如果我想知道每个年龄升高的前3条数据呢?而不是总的三条数据

支持(0) 反对(0) Mr_伍先生 | 园豆:6 (初学一级) | 2019-11-04 09:59

@Mr_伍先生:
参考下:https://blog.csdn.net/yige9394/article/details/79481706
“按name分组取最大的两个(N个)val” 处。应该能满足你的需求。不过效率方面就要测试下了..

支持(0) 反对(0) Ctrl` | 园豆:3317 (老鸟四级) | 2019-11-04 10:40

@Ctrl`: 这个方法之前自己写出来过,但是效率低的惊人。因为这种做法相当于内连接,查询的次数相当于n*n,如果这个n>10000的话,不敢想象,之前自己测试的查询结果大概需要好几秒,太慢了

支持(0) 反对(0) Mr_伍先生 | 园豆:6 (初学一级) | 2019-11-04 10:58

@Mr_伍先生: 那就坐等大佬们来分析分析吧,我也学习一下

支持(0) 反对(0) Ctrl` | 园豆:3317 (老鸟四级) | 2019-11-04 11:06
0

Top N问题,试下这个,用了存储过程
https://www.cnblogs.com/lyc94620/p/10418493.html

凌雨尘 | 园豆:202 (菜鸟二级) | 2019-12-02 16:22
0

数据不大情况下,可以直接分组

风行天下12 | 园豆:3867 (老鸟四级) | 2020-02-29 13:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册