CREATE OR REPLACE VIEW sungtb_view AS SELECT s.*, (kor + eng + mat) tot, round((kor + eng + mat)/3, 1) avg, RANK() OVER(ORDER BY (kor + eng + mat) DESC) rank FROM (SELECT * FROM sungtb) s ORDER BY no;
===================================
안녕하세요?! Oracle DB를 아주 조금씩 배워가는 알렉스입니다!
위와 같이 쿼리문을 적고 view를 등록했는데,
결과가 원하는 대로 나오지 않는 것 같아 여쭈어보고자 합니다!
랭크에서 내림차순 정렬로 합계가 나오면서 번호는 오름차순으로 나왔으면 하는데, 짧은 지식으론 잘 되지 않네요..ㅠㅠ
부탁드립니다!!
sungtb라는 테이블에서 'NO' 라는 컬럼은 출력시에 보여줄 라인 넘버와는 다름니다. (출력시의 라인 넘버값들은 테이블에 저장할 필요가 없읍니다.)
'NO' 컬럼을 레코드 넘버 혹은 학생 아이디로 생각하면 이해가 쉬울 것입니다. 따라서, 레코드들의 순서를 바꾸면, 각 'NO'의 값도 해댱하는 레코드와 같은 라인에 보여지게 됩니다.
WITH sungtb AS ( SELECT 1 AS no, 'Tom' AS name, 46 AS kor, 90 AS eng, 46 AS mat FROM dual UNION ALL SELECT 2, 'Maggie', 20, 60, 20 FROM dual UNION ALL SELECT 3, 'Emma', 60, 61, 60 FROM dual UNION ALL SELECT 4, 'Daisy', 59, 26, 95 FROM dual UNION ALL SELECT 5, 'RoyalJelly', 95, 100, 95 FROM dual UNION ALL SELECT 6, 'Alex', 50, 70, 50 FROM dual) SELECT rownum AS line_no, stat.* FROM (SELECT s.*, (kor + eng + mat) tot, round((kor + eng + mat)/3, 1) avg, RANK() OVER(ORDER BY (kor + eng + mat) DESC) rank FROM sungtb s ORDER BY rank) stat;