mysql双重条件排序问题,需要用到存储过程,并非order by 加逗号隔开可解决的。详情见描述

公司活动需要,业务描述如下(按团队投资):
按团队投资金额由大到小排序(没有并列名次,按投资金额顺延),同时要求投资团队人数必须满足一定要求:
第1名 至少100人
第2名 至少50人
第3名 至少20人
第4 ~6名 至少15人
第7 ~12名 至少10人
第13 ~20名 至少5人
如:两个团队人数都是100人以上,A投资100w,B投资99w,B顺延到第二名层次,跟50人以上团队按投资金额进行排序,以此类推。类似插入排序。
请问这样的排序该如何写,应该是用存储过程才能解决了,求教,感谢!

先创建一个函数。这个函数返回人数的规模范围。。比如 你传入200,返回是100,传入 105,返回是100,传入99.返回就是50. 因为按照规定来说。到底
是100人,还是105人没有任何区别。

那order by function(人数),先按照人数排序。然后后面逗号,再按照钱的关键字排序。就OK了。

你可以使用 “case when then else end ”,应该是可以满足的你的需求的。

像一楼说的大概就这样:

select id, groupNum(id) num, money from xxx ORDER BY num desc, money;

不过函数用来排序会很的慢,相当于每条数据不管要不要都得跑一次函数。不过数据不多,能用。

如果要用过程的话,就相当于把上面的概念拆分成多步,
1:先查出团队人数排名字段id,num(函数)。这里字段就两个越少越好。
2:关联查询以num,money排序

可以看出过程和那一句sql比也没什么差别,不过速度一定会快很多

如果理出过程的快的原因可以把sql改成这样

SELECT
g.id,
g.money
FROM
gz_user g RIGHT JOIN (select id, groupNum(id) num from gz_user LIMIT 10000) a on g.id = a.id
ORDER BY a.num desc,money

查询数据多少在子查询中控制,当然你会想上面那句也能加,不过上面那句加不加没差你可以试试。

其实就是想说你的业务用一句sql就能搞定了不是用过程才好才牛逼。

注:groupNum(id)返回的数字要像一楼说的