我有以下代码.
sql> select * from student_gpa; SSN GPA --------------- ---------- 22222 3 11111 4 55555 3 33333 4 44444 3
我确实有这个功能来获得前两个gpa得分行.
sql> select * from(从gpa desc中选择student_gpa的ssn,gpa),其中rownum< = 2;
SSN GPA --------------- ---------- 11111 4 33333 4
我的问题是我用什么功能来获得GPA得分的前n%.例如,由于我有两个人的GPA为4,密集等级将返回11111占据第1行,22222占据第2行.我实际上正在寻找一个函数说计算5%的GPA分数,返回的值将是11111和22222. 5%函数不应该仅返回11111.即使我有更多的gpa为4的条目,5%的函数仍会返回所有gpa为4的行.谢谢
你可以试试这个:
WITH got_analytics AS ( SELECT ssn,gpa,ROW_NUMBER () OVER (ORDER BY gpa DESC) AS r_num,COUNT (*) OVER () AS n_rows FROM student_gpa ) SELECT ssn,gpa FROM got_analytics WHERE r_num <= ROUND (n_rows * 12/*insert here your n%*/ / 100) ORDER BY gpa DESC