국어 | 영어 | 수학 | 총점 | |
---|---|---|---|---|
홍길동 | 40 | 82 | 75 | 197 |
춘향 | 85 | 92 | 78 | 255 |
몽룡 | 65 | 48 | 64 | 177 |
슈퍼맨 | 80 | 78 | 88 | 246 |
~ | ~ | ~ | ~ | ~ |
~ | ~ | ~ | ~ | ~ |
~ | ~ | ~ | ~ | ~ |
~ | ~ | ~ | ~ | ~ |
김길동 | 32 | 28 | 40 | 100 |
국어 | 영어 | 수학 | 총점 | |
---|---|---|---|---|
상위 5% | 평균 | 평균 | 평균 | 평균 |
상위 10% | ||||
상위 15% | ||||
상위 20% | ||||
상위 25% | ||||
상위 30% | ||||
상위 35% | ||||
상위 40% | ||||
상위 45% | ||||
상위 50% | ||||
상위 55% | ||||
상위 60% | ||||
상위 65% | ||||
상위 70% | ||||
상위 75% | ||||
상위 80% | ||||
상위 85% | ||||
상위 90% | ||||
상위 95% | ||||
상위 100% |
WITH t AS ( SELECT /*+ materialize */ LEVEL id , DBMS_RANDOM.STRING('U', 3) nm , ROUND(DBMS_RANDOM.VALUE(60, 100)) kor , ROUND(DBMS_RANDOM.VALUE(60, 100)) eng , ROUND(DBMS_RANDOM.VALUE(60, 100)) mat FROM dual CONNECT BY LEVEL <= 100 ) SELECT '상위 ' || a.p || '%' gb , ROUND(AVG(kor), 2) kor , ROUND(AVG(eng), 2) eng , ROUND(AVG(mat), 2) mat , ROUND(AVG(tot), 2) tot FROM (SELECT LEVEL * 5 p FROM dual CONNECT BY LEVEL <= 20 ) a , (SELECT id, nm , kor, eng, mat , kor + eng + mat tot , RANK() OVER(ORDER BY kor + eng + mat DESC) / COUNT(*) OVER() * 100 p FROM t ) b WHERE a.p >= b.p(+) GROUP BY a.p ORDER BY a.p ;
WITH t AS ( SELECT /*+ materialize */ LEVEL id , DBMS_RANDOM.STRING('U', 3) nm , ROUND(DBMS_RANDOM.VALUE(60, 100)) kor , ROUND(DBMS_RANDOM.VALUE(60, 100)) eng , ROUND(DBMS_RANDOM.VALUE(60, 100)) mat FROM dual CONNECT BY LEVEL <= 100 ) SELECT '상위 ' || a.p || '%' gb , ROUND(AVG(DECODE(gb, 'KOR', v)), 2) kor , ROUND(AVG(DECODE(gb, 'ENG', v)), 2) eng , ROUND(AVG(DECODE(gb, 'MAT', v)), 2) mat , ROUND(AVG(DECODE(gb, 'TOT', v)), 2) tot FROM (SELECT LEVEL * 5 p FROM dual CONNECT BY LEVEL < 20) a , (SELECT gb, v , RANK() OVER(PARTITION BY gb ORDER BY v DESC) / COUNT(*) OVER(PARTITION BY gb) * 100 p FROM (SELECT kor, eng, mat , kor + eng + mat tot FROM t ) UNPIVOT (v FOR gb IN (kor, eng, mat, tot)) ) b WHERE a.p >= b.p(+) GROUP BY a.p ORDER BY a.p ;