oracle – 前n%名列前n%

前端之家收集整理的这篇文章主要介绍了oracle – 前n%名列前n%前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下代码.
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

猜你在找的Oracle相关文章