加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle – 前n%名列前n%

发布时间:2020-12-12 13:50:43 所属栏目:百科 来源:网络整理
导读:我有以下代码. SQL select * from student_gpa; SSN GPA --------------- ---------- 22222 3 22222 4 55555 3 33333 4 44444 3 我确实有这个功能来获得前两个gpa得分行. SQL select * from(从gpa desc中选择student_gpa的ssn,gpa),其中rownum = 2; SSN GPA
我有以下代码.
SQL> select * from student_gpa;

    SSN                    GPA
    --------------- ----------
   22222                    3
   22222                    4
   55555                    3
   33333                    4
   44444                    3

我确实有这个功能来获得前两个gpa得分行.

SQL> select * from(从gpa desc中选择student_gpa的ssn,gpa),其中rownum< = 2;

SSN                    GPA
    --------------- ----------
    22222                    4
    33333                    4

我的问题是我用什么功能来获得GPA得分的前n%.例如,由于我有两个人的GPA为4,密集等级将返回22222占据第1行,22222占据第2行.我实际上正在寻找一个函数说计算5%的GPA分数,返回的值将是22222和22222. 5%函数不应该仅返回22222.即使我有更多的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读