1. Over介紹函數
Over爲開窗函數。就是把知足條件的數據分紅幾個區域,每一個區域能夠經過像現實中的「窗口」來觀察統計這些數據。spa
over不能單獨使用,要和分析函數:rank(), dense_rank(), row_number(),ntile()等一塊兒使用。code
2. 示例blog
(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名。
it
(2)Dense_Rank(密集排名)io
select t.*,dense_rank() over(partition by t.subject order by t.scorce desc) as paiming from student t;
按照科目進行分區,每一個區域按照分數進行排序,並得出排序結果的排名號。dense_rank()爲連續排序,有兩個第1名,接下來就是第2名。
class
(3)row_number(行號)select
select t.*,row_number() over(partition by t.subject order by t.scorce desc) as num from student t;
按照科目進行分區,每一個區域按照分數進行排序,並得出排序結果的序號。