VIEW를 만들었는데 원하는대로 만들어지지 않습니다. ㅠㅠ 0 2 1,738

by 알렉스 [Oracle 기초] VIEW RANK [2018.01.12 16:17:30]


return1.png (8,023Bytes)

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를 등록했는데,

결과가 원하는 대로 나오지 않는 것 같아 여쭈어보고자 합니다!

랭크에서 내림차순 정렬로 합계가 나오면서 번호는 오름차순으로 나왔으면 하는데, 짧은 지식으론 잘 되지 않네요..ㅠㅠ

부탁드립니다!!

by 그로밋 [2018.01.13 14:59:38]

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;

 


by 알렉스 [2018.01.15 17:05:09]

감사합니다ㅠㅠ 그로밋님 덕분에 잘 이해했습니다!!:D 알려주신 것을 바탕으로 다시한번 복습해보겠습니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입