국어 | 영어 | 수학 | 총점 | |
---|---|---|---|---|
홍길동 | 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% |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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 ; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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 ; |