CREATE TABLE #temp_student_result ( student_name NVARCHAR(20) , class_name NVARCHAR(20) , score FLOAT ); INSERT INTO #temp_student_result ( student_name, class_name, score ) VALUES ( N'张三1', -- student_name - nvarchar(20) N'一班', -- class_name - nvarchar(20) 15 -- score - float ); INSERT INTO #temp_student_result ( student_name, class_name, score ) VALUES ( N'张三2', -- student_name - nvarchar(20) N'一班', -- class_name - nvarchar(20) 80 -- score - float ); INSERT INTO #temp_student_result ( student_name, class_name, score ) VALUES ( N'张三3', -- student_name - nvarchar(20) N'一班', -- class_name - nvarchar(20) 60 -- score - float ); INSERT INTO #temp_student_result ( student_name, class_name, score ) VALUES ( N'张三4', -- student_name - nvarchar(20) N'一班', -- class_name - nvarchar(20) 100 -- score - float ); INSERT INTO #temp_student_result ( student_name, class_name, score ) VALUES ( N'张三5', -- student_name - nvarchar(20) N'一班', -- class_name - nvarchar(20) 100 -- score - float ); INSERT INTO #temp_student_result ( student_name, class_name, score ) VALUES ( N'李四1', -- student_name - nvarchar(20) N'二班', -- class_name - nvarchar(20) 15 -- score - float ); INSERT INTO #temp_student_result ( student_name, class_name, score ) VALUES ( N'李四2', -- student_name - nvarchar(20) N'二班', -- class_name - nvarchar(20) 80 -- score - float ); INSERT INTO #temp_student_result ( student_name, class_name, score ) VALUES ( N'李四3', -- student_name - nvarchar(20) N'二班', -- class_name - nvarchar(20) 60 -- score - float ); INSERT INTO #temp_student_result ( student_name, class_name, score ) VALUES ( N'李四4', -- student_name - nvarchar(20) N'二班', -- class_name - nvarchar(20) 86 -- score - float ); INSERT INTO #temp_student_result ( student_name, class_name, score ) VALUES ( N'李四5', -- student_name - nvarchar(20) N'二班', -- class_name - nvarchar(20) 95 -- score - float ); --年级连续不并列排序 SELECT * , ROW_NUMBER() OVER ( ORDER BY score DESC ) [rank] FROM #temp_student_result; --年级并列不连续排名 SELECT * , RANK() OVER ( ORDER BY score DESC ) [rank] FROM #temp_student_result; --年级并列连续排名 SELECT * , DENSE_RANK() OVER ( ORDER BY score DESC ) [rank] FROM #temp_student_result; --班级顺序排名(分组排序) SELECT * , ROW_NUMBER() OVER ( PARTITION BY class_name ORDER BY score DESC ) [rank] FROM #temp_student_result; DROP TABLE #temp_student_result;
1,年级连续不并列排序
--年级连续不并列排序 SELECT * , ROW_NUMBER() OVER ( ORDER BY score DESC ) [rank] FROM #temp_student_result;
2,年级并列不连续排名
--年级并列不连续排名 SELECT * , RANK() OVER ( ORDER BY score DESC ) [rank] FROM #temp_student_result;
3,年级并列连续排名
--年级并列连续排名 SELECT * , DENSE_RANK() OVER ( ORDER BY score DESC ) [rank] FROM #temp_student_result;
4,班级顺序排名(分组排序)
--班级顺序排名(分组排序) SELECT * , ROW_NUMBER() OVER ( PARTITION BY class_name ORDER BY score DESC ) [rank] FROM #temp_student_result;