【SQL查詢】分區查詢Over


1. Over介紹

  Over為開窗函數。就是把滿足條件的數據分成幾個區域,每個區域可以通過像現實中的“窗口”來觀察統計這些數據。

  over不能單獨使用,要和分析函數:rank(), dense_rank(), row_number(),ntile()等一起使用。

2. 示例

  (1)腳本

/* 表結構*/
CREATE TABLE student(
  no int,
  ca varchar(20),
  name varchar(50),
  subject  varchar(50),
  scorce int
);

/* 數據 */
INSERT INTO student VALUES(1, '1班', '張三', '語文', 85);
INSERT INTO student VALUES(2, '1班', '張三', '數學', 90);
INSERT INTO student VALUES(3, '1班', '張三', '英語', 70);
INSERT INTO student VALUES(4, '1班', '李四', '語文', 70);
INSERT INTO student VALUES(5, '1班', '李四', '數學', 99);
INSERT INTO student VALUES(6, '1班', '李四', '英語', 62);
INSERT INTO student VALUES(7, '1班', '王五', '語文', 82);
INSERT INTO student VALUES(8, '1班', '王五', '數學', 74);
INSERT INTO student VALUES(9, '1班', '王五', '英語', 89);
INSERT INTO student VALUES(10, '2班', '劉曉希', '語文', 77);
INSERT INTO student VALUES(11, '2班', '劉曉希', '數學', 99);
INSERT INTO student VALUES(12, '2班', '劉曉希', '英語', 80);
INSERT INTO student VALUES(13, '2班', '朱鵬', '語文', 87);
INSERT INTO student VALUES(14, '2班', '朱鵬', '數學', 86);
INSERT INTO student VALUES(15, '2班', '朱鵬', '英語', 76);
INSERT INTO student VALUES(16, '2班', '歐陽雪', '語文', 91);
INSERT INTO student VALUES(17, '2班', '歐陽雪', '數學', 83);
INSERT INTO student VALUES(18, '2班', '歐陽雪', '英語', 77);
commit;

 

  (2)Rank(排名):

select t.*, rank() over(partition by t.subject order by t.scorce desc) as paiming  from student t;

按照科目進行分區,每個區域按照分數進行排序,並得出排序結果的排名號。rank()是跳躍排序,有兩個第1名,接下來就是第3名。

  (2)Dense_Rank(密集排名)

select t.*,dense_rank() over(partition by t.subject order by t.scorce desc) as paiming from student t;

按照科目進行分區,每個區域按照分數進行排序,並得出排序結果的排名號。dense_rank()為連續排序,有兩個第1名,接下來就是第2名。

  (3)row_number(行號)

select t.*,row_number() over(partition by t.subject order by t.scorce desc) as num from student t;

按照科目進行分區,每個區域按照分數進行排序,並得出排序結果的序號。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM