關於數據庫排序查詢

關於數據庫排序查詢簡單總結

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

相關文章
相關標籤/搜索