데이터가 다음과 같이 되었다고 할때 ... --> 홍길동 10 20 30 40 50
다음과 같은 결과를 얻고자 합니다... --> 홍길동 50 40 30
(3등 까지만 표시)
SQL>conn scott/tiger
SQL>create table test (
name varchar2(10),
a number,
b numner,
c number,
d number,
e number);
SQL>create temp (
name varchar2(10),
num number);
SQL>insert into test values ('홍길동',10,20,30,40,50);
SQL> select * from test;
NAME A B C D E
---------- ---------- ---------- ---------- ---------- ----------
홍길동 10 20 30 40 50
SQL>insert into temp select name, a from test;
SQL>insert into temp select name, b from test;
SQL>insert into temp select name, c from test;
SQL>insert into temp select name, d from test;
SQL>insert into temp select name, e from test;
SQL> select * from temp;
NAME NUM
---------- ----------
홍길동 10
홍길동 20
홍길동 30
홍길동 40
홍길동 50
SQL>select (select name from temp where rownum = 1),
(select min(num) from temp t1 where 1 > (select count(num) from temp t2 where t2.num > t1.num)) first,
(select min(num) from temp t1 where 2 > (select count(num) from temp t2 where t2.num > t1.num)) second,
(select min(num) from temp t1 where 3 > (select count(num) from temp t2 where t2.num > t1.num)) third
from dual
/
[결과]
(SELECTNAM FIRST SECOND THIRD
---------- ---------- ---------- ----------
홍길동 50 40 30
물론 아래 처럼 rank를 써도 되구요...
SQL> select
2 max(decode(rank,1,num)) "First",
3 max(decode(rank,2,num)) "Second",
4 max(decode(rank,3,num)) "Third"
5 from (select name, num, rank() over (order by num desc) rank from temp);
First Second Third
---------- ---------- ----------
50 40 30
다음과 같은 결과를 얻고자 합니다... --> 홍길동 50 40 30
(3등 까지만 표시)
SQL>conn scott/tiger
SQL>create table test (
name varchar2(10),
a number,
b numner,
c number,
d number,
e number);
SQL>create temp (
name varchar2(10),
num number);
SQL>insert into test values ('홍길동',10,20,30,40,50);
SQL> select * from test;
NAME A B C D E
---------- ---------- ---------- ---------- ---------- ----------
홍길동 10 20 30 40 50
SQL>insert into temp select name, a from test;
SQL>insert into temp select name, b from test;
SQL>insert into temp select name, c from test;
SQL>insert into temp select name, d from test;
SQL>insert into temp select name, e from test;
SQL> select * from temp;
NAME NUM
---------- ----------
홍길동 10
홍길동 20
홍길동 30
홍길동 40
홍길동 50
SQL>select (select name from temp where rownum = 1),
(select min(num) from temp t1 where 1 > (select count(num) from temp t2 where t2.num > t1.num)) first,
(select min(num) from temp t1 where 2 > (select count(num) from temp t2 where t2.num > t1.num)) second,
(select min(num) from temp t1 where 3 > (select count(num) from temp t2 where t2.num > t1.num)) third
from dual
/
[결과]
(SELECTNAM FIRST SECOND THIRD
---------- ---------- ---------- ----------
홍길동 50 40 30
물론 아래 처럼 rank를 써도 되구요...
SQL> select
2 max(decode(rank,1,num)) "First",
3 max(decode(rank,2,num)) "Second",
4 max(decode(rank,3,num)) "Third"
5 from (select name, num, rank() over (order by num desc) rank from temp);
First Second Third
---------- ---------- ----------
50 40 30
![]() | ![]() ![]() | 12-27 | 1983 | |
![]() | ![]() ![]() | 12-11 | 1453 | |
53 | ![]() ![]() | 03-15 | 1207 | |
52 | ![]() ![]() | 01-31 | 1372 | |
51 | ![]() ![]() | 01-31 | 1199 | |
50 | ![]() ![]() | 01-31 | 1063 | |
49 | ![]() ![]() | 01-19 | 1371 | |
48 | ![]() ![]() | 01-11 | 1204 | |
47 | ![]() ![]() | 01-03 | 1706 | |
46 | ![]() ![]() | 12-27 | 1983 | |
45 | ![]() ![]() | 12-19 | 1474 | |
44 | ![]() ![]() | 12-14 | 1436 | |
43 | ![]() ![]() | 12-11 | 1453 | |
42 | ![]() ![]() | 12-09 | 1168 | |
41 | ![]() ![]() | 12-01 | 1375 | |
40 | ![]() ![]() | 12-01 | 1532 | |
39 | ![]() ![]() | 12-01 | 1031 |
댓글 없음:
댓글 쓰기