十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
CREATE PROCEDURE GetScRank()
我们提供的服务有:成都网站设计、网站制作、微信公众号开发、网站优化、网站认证、栖霞ssl等。为上1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的栖霞网站制作公司
BEGIN
DECLARE SigDone INT DEFAULT 0;
DECLARE Cno_ BIGINT;
DECLARE Cur1 CURSOR FOR SELECT DISTINCT Cno FROM Score;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET SigDone = 1;
OPEN Cur1;
TRUNCATE scResult;
FETCH Cur1 INTO Cno_;
WHILE NOT SigDone DO
INSERT INTO scResult (Sno,Cno,Sc) (SELECT DISTINCT Sno,Cno,Sc FROM Score WHERE Cno =Cno_ ORDER BY Sc DESC LIMIT 10);
COMMIT;
FETCH Cur1 INTO Cno_;
END WHILE;
CLOSE Cur1;
END
用游标效率应该还行吧.
前几天工作上遇到一个问题,在mysql数据查询的时候,使用的是in条件,而结果需要根据in来进行排序,当时尝试了几次都没成功,后来在度娘的帮助下,找到了解决办法:
select * from table_name where id in (6,2,1,10,5,7..)
查询的结果和in中的顺序并不一致,也就是说在批量查询时,mysql的查询并不是按照in中的值得顺序来查询的。那怎么才能保证和in查询中的顺序相同呢?
查询了资料发现有两种方式可以对in查询的结果进行排序。一种是order by find_in_set,另外一种是order by substring_index
1、select * from table_name where id in (6,2,1,10,5,7..) order by find_in_set(id,'6,2,1,10,5,7');
2、select * from table_name where id in (6,2,1,10,5,7..) order by substring_index('6,2,1,10,5,7',id,1);
因为mysql里没有top方法,使用top会报语法的错误,
mysql提供了limit方法,可以达到同样的效果。
select?*?from?table?order?by?id?desc?limit?10;
select * from (select * from TABLE limit 10) aa
order by name;
其实,一般来说,最好还是先排序,再进行行数限制。
由于mysql没有row_number()方法,只能通过其它方法来进行排序,以下为使用变量来实现排序
示例1:以col1分组,col2正序排序
示例2:以col1分组,col2倒序排序
在执行查询结果时,默认情况下查询结果无序排列。但我们有时需要对数据按一定规则进行排序。这时可以通过ORDER BY子句来实现这个功能。语法如下:
SELECT *,column [alias],... FROM table
[WHERE condition(s)]
[ORDER BY column[ASC|DESC]];
默认是ASC指定的升序排列,DESC用来指定降序排列。
1、升序排序:
使用ORDER BY子句时,默认情况下数据是按升序排列的,故可以用ASC关键字指点升序排列,或者不指定,默认就是升序,显示效果是一样的,如下图:
2、降序排序:
当需要查询结果降序排列时,必须在排序后指定DESC关键字。如下图是查看职员薪水的降序排列: