关于数据库排序查询

会有一股神秘感。 提交于 2019-11-28 20:53:38

关于数据库排序查询简单总结

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 也具有排序功能

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 分页

aelect * from test_ly limit 3,3;(从3开始不包括3,增加三个)

5,分组排序

ROW_NUMBER() OVER(
          PARTITION BY col1 ORDER BY col2)

表示根据col1分组,在分组内部根据col2排序。此函数计算的值就表示每组内部排序后的顺序编号,组内连续且唯一。

RANK()       OVER(
          PARTITION BY col1 ORDER BY col2)

表示根据col1分组,在分组内部根据col2给予等级标识,即排名,相同的数据返回相同排名。特点是跳跃排序,如果有相同数据,则排名相同,比如并列第二,则两行数据都标记为2,但下一位将是第四名

DENSE_RANK() OVER(
          PARTITION BY col1 ORDER BY col2)

表示根据col1分组,在分组内部根据col2给予等级标识,即排名,相同的数据返回相同排名。特点是连续排序,如果有并列第二,下一个排序将是三,这一点是和RANK的不同,RANK是跳跃排序

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!