[Oracle] FINALWORKSHOP (6) 오답 정리

    문제

     

    Q.300권 이상 등록된 도서의 저작 형태 및 등록된 도서 수량을 표시하는 SQL 구문을 작성하시오.
    (저작 형태가 등록되지 않은 경우는 제외할 것)

     

    내가 기술한 코드 

    무려 2292행이 나오며, 한 눈에 봐도 망한 코드라는 것을 알 수 있다. 

     

     

    틀린이유

    문제를 다시 읽어보면, 

     

    Q.300권 이상 등록된 도서저작 형태 및 등록된 도서 수량을 표시하는 SQL 구문을 작성하시오. 
    (저작 형태가 등록되지 않은 경우는 제외할 것)

     

    문제에서는 300권 이상 등록된 도서의 도서의 저작 형태및 등록된 수량을 요구하지만, 나는모든도서의 저작 형태와 재고수량 기술했다. 따라서, 도서명이 담긴 TB_BOOK테이블을 JOIN을 할 필요가 없다.

     

     

     

    해결방안

    저작 형태와 등록된 수량을 기준으로 한, 코드는 다음과 같다. 

     

    1) COUNT함수를 활용하여 , 각 저작 형태가 몇 행인지를 파악한다 ( == 등록된 수량 )

    2) COMPOSE_TYPE을 기준으로 묶어준다. 

     

     

     

    • 만약, 다음과 같이 기술했다면, 오류가 발생할 것이다.
    • GROUP BY절에 COMPOSE_TYPE 테이블과 COUNT(*)를 같이 기술하는 경우 

     



    3) 기본적인 틀을 잡아줬다면, 조건식을 통해서 NULL 값을 제외시켜준다.

    4) GROUP BY절로 묶은 값들의 조건을 제시해야하기 때문에, HAVING절을 사용해서 GROUP BY에 조건을 걸어준다.

       조건은 300권 이상 등록된 도서 이다. 따라서 HAVING절에는 그룹함수인 COUNT(*)를 활용한 조건을 기술하여야한       다.

    • 만약 다음과 같이 기술했다면, 오류가 발생했을 것이다. 
    • 300권 이상 등록된 도서WHERE절의 조건으로 제시했을 경우 
    더보기

    왜 안돼?

    각 절별 실행 순서와 연관이 되어있다. 모든 조건을 WHERE절에 기술하는 것이 아니다. 하단에 첨부된 NOTION에 <각 절별 실행순서>를 확인한다면, WHERE절로 조건 검사 후에 GROUP BY절이 실행되는 것을 알 수 있다.

     

     

    조건 검사한 후에 GROUP BY로 묶을 수는 없을까?로 생각할 수 있겠지만, 애초에 GROUP 함수 (여기서는 COUNT(*)를 의미한다)는 WHERE절에 기술 될 수 없기 때문에, 해당 코드는 잘못 기술된 코드라고 할 수 있다. 

    www.notion.so/GROUP-BY-HAVING-5dbdf4d519b94549946c73d228d057a8

     

    GROUP BY & HAVING

    < GROUP BY 절>

    www.notion.so

     

     

    배운점

    - 문제를 꼼꼼하게 잘 읽자

    - GROUP BY / HAVING에 대한 개념을 다시 확인해보자 ! 

    728x90

    댓글