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);
-- RANK() 排名
-- 按照科目進行分區,每個區域按照分數進行排序,並得出排序結果的排名號。rank()是跳躍排序,有兩個第1名,接下來就是第3名。
SELECT t.*,
RANK() OVER (PARTITION BY t.subject ORDER BY t.scorce DESC) AS 排名
FROM student t
-- Dense_Rank()密集排名
-- 按照科目進行分區,每個區域按照分數進行排序,並得出排序結果的排名號。dense_rank()為連續排序,有兩個第1名,接下來就是第2名。
SELECT t.*,
DENSE_RANK() OVER (PARTITION BY t.subject ORDER BY t.scorce DESC) AS 排名
FROM student t;
-- row_number()行號
SELECT t.*,
ROW_NUMBER() OVER (PARTITION BY t.subject ORDER BY t.scorce DESC) AS 行號
FROM student t;
-- NTILE()查詢結果分組
SELECT t.*,
NTILE(6) OVER (PARTITION BY t.subject ORDER BY t.scorce DESC) AS 分組
FROM student t
ORDER BY 分組