Mysql的查询结果排序问题。

左师傅冰红茶 2012-03-16 03:12:04
我有一个表,初始的查询结果有几千条数据,现在想取其中的20条。但是要求是这20条中某个字段尽量不重复(比方说班级成员表):初始查询结果按照班级来排序是这样的
id name class
1 a class01
2 b class01
3 aa class01
4 bb class02
5 cc class02
6 dd class02
7 ee class03
....假设每个班级都有几百条数据,有n个班(这个班级数目是不固定的,没查询之前我也不会晓得是几),现在要抽出其中20条,要求尽量把20条数据分散从各个班抽,例如有20个或以上班的话,每个班一条,有小于20个班的话,每个班抽一条之后再按顺序从各个班来抽,有点类似与哈希表的样子。请问这个结果应该如何用sql语句实现?结贴率100%,希望大家积极帮忙。
...全文
140 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
左师傅冰红茶 2012-03-16
  • 打赏
  • 举报
回复
感谢大神,这样确实可以实现,但是效率貌似很低。。数据库中数据多的情况下用了78s...
[Quote=引用 4 楼 wwwwa 的回复:]

修改:
假设ID唯一
select * from (
select a.id,a.name,a.class,count(*) as gs from tt a left join tt b
on a.class=b.class and a.id<=b.id group by a.id,a.name,a.class) a1
order by gs,class
[/Quote]
nicenight 2012-03-16
  • 打赏
  • 举报
回复
要不,用代码生成几个 union 语句吧。代码事件查出有几个 class,然后分配每个 class 查多少条数据,组合成 union 查询。
WWWWA 2012-03-16
  • 打赏
  • 举报
回复
修改:
假设ID唯一
select * from (
select a.id,a.name,a.class,count(*) as gs from tt a left join tt b
on a.class=b.class and a.id<=b.id group by a.id,a.name,a.class) a1
order by gs,class
WWWWA 2012-03-16
  • 打赏
  • 举报
回复
假设ID唯一
select * from (
select a.id,a.name,a.class,count(*) as gs from tt a left join tt b
on a.class=b.class and a.id<=b.id group by a.id,a.name,a.class) a1
order by class,gs
左师傅冰红茶 2012-03-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wwwwa 的回复:]

用SP OR 代码来处理好一些
[/Quote]
感谢大神回复,但是初始查询结果可能会非常多,程序里处理太浪费资源,我刚开始想有没有一种方法把它按照这种方式来排序
1 a class01
2 b class02
3 aa class03
4 bb class04
5 cc class01
6 dd class02
7 ee class03

就是按照class的这种顺序来排序,请问有可以实现这个效果的sql语句吗?
WWWWA 2012-03-16
  • 打赏
  • 举报
回复
用SP OR 代码来处理好一些

56,675

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧