PARTITION BY 안쓰고 결과값을 출력하고싶은데.. 0 8 1,071

by DB초보자입니다 [SQL Query] [2017.09.15 12:50:48]


SELECT   A.이름, A.성별, A.과목, A.점수
       , MAX(점수) OVER (PARTITION BY 이름) AS 개인별최고점수
       , AVG(점수) OVER (PARTITION BY 이름) AS 개인별평균점수
       , SUM(점수) OVER (PARTITION BY 0)  AS 전체점수합계
       , COUNT(과목) OVER (PARTITION BY 이름) AS 개인별수강과목
       , SUM(점수) OVER (PARTITION BY 성별, 과목) AS 성별과목별점수합계

      , 과목 || '_' || ROW_NUMBER() OVER (PARTITION BY 과목 ORDER BY 점수 DESC) AS 과목별등수

      , 성별 || '_' || RANK() OVER (PARTITION BY 성별 ORDER BY 점수 DESC) AS 성별등수
FROM
(
SELECT 'A' AS 이름, 'F' AS 성별, 'KOR' AS 과목, 90 AS 점수 FROM DUAL
UNION
SELECT 'A', 'F', 'MAT',  95 FROM DUAL
UNION
SELECT 'B', 'M', 'KOR',  80 FROM DUAL
UNION
SELECT 'B', 'M', 'MAT', 100 FROM DUAL
UNION
SELECT 'C', 'F', 'KOR',  70 FROM DUAL
UNION
SELECT 'C', 'F', 'MAT',  85 FROM DUAL
UNION
SELECT 'D', 'M', 'KOR',  90 FROM DUAL

) A
ORDER BY A.이름, A.과목

--------------------

PARTITION BY 안쓰고 GROUP BY 로 위와 동일한 결과값을 얻고싶은데 

생각처럼 되지가 않네요...

by 우리집아찌 [2017.09.15 12:54:18]

왜요? 서브쿼리 만드셔서 돌려야할텐데요?


by DB초보자입니다 [2017.09.15 13:02:37]

한번 이런저런 방법을 이용해서 출력을 해보고싶어서요


by 우리집아찌 [2017.09.15 13:07:04]

보통은 거꾸로 하지 않아요 ?? ^^


by DB초보자입니다 [2017.09.15 13:11:15]

그런가요....첨부터 저런 문장을봐서 그런지ㅠㅠ역으로 해보고싶다는 생각이 들었네요..


by 마농 [2017.09.15 13:07:38]

막연한 질문이네요.
다 제 각각 나름의 용도가 있는 것입니다.
무작정 바꾼다고 되는게 아닙니다.


by DB초보자입니다 [2017.09.15 13:12:08]

헉..무작정 바꿔보고싶긴했는데

바꿔야될 이유?용도를 생각해봐야겟네요!

두분다 감사드립니다.!!!!!


by jkson [2017.09.15 13:26:29]

그룹바이 조건에 따라 인라인뷰를 여러개 만들고 조인시키면 되겠지만

성능도 안좋고 작성하기도 번거롭고 해서..

결론적으로 공부해보시려면 작성해보셔도 되겠지만 다 작성하시면

왜 윈도우함수를 쓰는 게 편한가를 절실히 느끼실 수 있을 겁니다ㅎㅎ


by DB초보자입니다 [2017.09.15 13:29:46]

조은 말씀 감사드립니다.

 

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