[프로그래머스] SQL Lv.3 - 조건에 맞는 사용자와 총 거래금액 조회하기
by Rev_GROUP BY - HAVING 절을 이용하는 비교적 어렵진 않는 문제였다.
-- 완료된 중고 거래의 총금액이 70만원 이상인 사람
-- 총거래금액을 기준으로 오름차순 정렬
-- 회원ID, 닉네임, 총거래금액 조회
SELECT T1.USER_ID, T1.NICKNAME, SUM(T2.PRICE) AS TOTAL_SALES
FROM USED_GOODS_USER T1
INNER JOIN USED_GOODS_BOARD T2
ON T1.USER_ID = T2.WRITER_ID
WHERE T2.STATUS = 'DONE'
GROUP BY T1.USER_ID, T1.NICKNAME
HAVING SUM(T2.PRICE) >= 700000 -- HAVING절에는 집계함수 사용 가능 !
ORDER BY SUM(T2.PRICE) -- ORDER BY절에도 집계함수 사용 가능
집계함수 사용에는 은근 제한이 있기 때문에
HAVING절이랑 ORDER BY절에서 집계 함수 사용이 되나 ....? 하고 생각을 했는데, HAVING절에서야 당연히 되어야 할 것 같고, ORDER BY절에서도 사용을 할 수 있구나 싶었다.
이 개념을 알려면 쿼리의 실행 순서를 안다면 편리할 것 같다 !
쿼리의 실행 순서
쿼리의 실행순서는 FROM(+JOIN) - WHERE - GROUP BY - HAVING - SELECT - ORDER BY
SELECT T1.USER_ID, T1.NICKNAME, SUM(T2.PRICE) AS TOTAL_SALES
FROM USED_GOODS_USER T1
INNER JOIN USED_GOODS_BOARD T2
ON T1.USER_ID = T2.WRITER_ID
WHERE T2.STATUS = 'DONE'
GROUP BY T1.USER_ID, T1.NICKNAME
HAVING SUM(T2.PRICE) >= 700000
ORDER BY TOTAL_SALES
해당 실행순서를 이용한다면 ORDER BY절에서 ALIAS를 사용할 수 있다는 것도 알 수 있다.
SELECT절은 GROUP BY와 HAVING절 이후에 실행되기 때문에
HAVING절에서 TOTAL_SALES 약어를 사용하게 된다면 에러가 난다고 생각했는데,
어째 Oracle에서는 HAVING절에 약어를 쓰면 에러가 나고, MySQL에서는 약어를 쓸 수 있다 .... ?
왜지 .....?
실행순서는 다 같은 거 아니었나요 ....
내일 한 번 다시 봐야할 것 같습니당
'PS > PS' 카테고리의 다른 글
[D2] SWEA 1940 가랏! RC카! - Java (0) | 2022.11.15 |
---|---|
[D2] SWEA 1945 소인수분해 - Java (0) | 2022.11.14 |
[D3] SWEA 2805 농작물 수확하기 - Java (0) | 2022.11.11 |
[D2] SWEA 1948 날짜 계산기 - Java (0) | 2022.11.10 |
[D2] SWEA 1954 달팽이 숫자 - Java (0) | 2022.11.10 |
블로그의 정보
Hi Rev
Rev_