CREATE TABLE TEST_LY( ID NUMBER(4), A NUMBER(2), B NUMBER(2) ); INSERT INTO TEST_LY VALUES(1,1,2); INSERT INTO TEST_LY VALUES(2,3,1); INSERT INTO TEST_LY VALUES(3,1,3); INSERT INTO TEST_LY VALUES(4,3,2); INSERT INTO TEST_LY VALUES(5,1,5); INSERT INTO TEST_LY VALUES(6,1,2); INSERT INTO TEST_LY VALUES(7,4,-1); INSERT INTO TEST_LY VALUES(8,1,2); COMMIT;
当在查询时候出现排序需求是可考虑从这几方面设计查询语句。 1,使用order by 排序。数据库
select * from test_ly order by id;默认是升序排列 select * from test_ly order by id Desc ;降序排列。 select * from test_ly order by id Asc ;升序排列。
2,union 也具备排序功能oracle
SELECT * FROM TEST_LY WHERE A=1 OR B=2 union select * from test_ly where b=2 ;
会按照Id 升序排列。 3,自定义排序 : 使用 order by case when esle end 选择全部a=1或b=2的记录,使得a=1且b=2的记录 排在最前面,而且b=2的记录按id降序排列。函数
SELECT * FROM TEST_LY WHERE A=1 OR B=2 ORDER BY CASE WHEN A=1 AND B=2 THEN 0 ELSE 1 END ,id DESC;
4,与分页组合 oracle 分页设计
select * from (select rownum r ,t1.* from (select * from test_ly order by id) t1 where rownum <7 ) t2 where t2.r>3;
mySql 分页code
aelect * from test_ly limit 3,3;(从3开始不包括3,增长三个)
5,分组排序排序
ROW_NUMBER() OVER( PARTITION BY col1 ORDER BY col2)
表示根据col1分组,在分组内部根据col2排序。此函数计算的值就表示每组内部排序后的顺序编号,组内连续且惟一。it
RANK() OVER( PARTITION BY col1 ORDER BY col2)
表示根据col1分组,在分组内部根据col2给予等级标识,即排名,相同的数据返回相同排名。特色是跳跃排序,若是有相同数据,则排名相同,好比并列第二,则两行数据都标记为2,但下一位将是第四名io
DENSE_RANK() OVER( PARTITION BY col1 ORDER BY col2)
表示根据col1分组,在分组内部根据col2给予等级标识,即排名,相同的数据返回相同排名。特色是连续排序,若是有并列第二,下一个排序将是三,这一点是和RANK的不一样,RANK是跳跃排序test