SQL 오답노트 + WHERE절에 순위 함수 작성하면 안 되는 이유
예제) SALES 테이블을 활용하여, 구매수량이 높은 상위 10명을 조회하시오.
(비회원의 회원번호 "9999999"는 제외하시오.)
SELECT MEM_NO
,RANK() OVER (ORDER BY SALES_QTY DESC) AS 구매수량_순위
FROM SALES
WHERE MEM_NO <> "9999999"
GROUP
BY MEM_NO;
👉 : 만약 1명의 회원이 같은 날에만 구매를 한 상황이면 맞았을 것이다.
💡 하지만 1명의 회원이 여러날 구매를 해서 테이블 안의 ORDER_DATE가 달라져서 1명의 회원에 여러 행이 생기기 때문에 1명의 구매수량이어도 구하려면 SALES_QTY가 아니라 SUM(SALES_QTY)를 해야한다.
(회원번호 별로 그룹화를 했기 때문에 합을 해도 회원번호 별로 합해진다.)
SELECT MEM_NO
,RANK() OVER (ORDER BY SUM(SALES_QTY) DESC) AS 구매수량_순위
FROM SALES
WHERE MEM_NO <> "9999999"
AND RANK() OVER (ORDER BY SUM(SALES_QTY) DESC) <= 10
GROUP
BY MEM_NO;
💡 오류 발생 이유
원리 : SLELCT문이 실행되기 전에 WHERE, GROUP BY를 실행한 후에 SELECT문이 실행된다.
∴ 이때 WHERE 다음에 쓰인 RANK() OVER (ORDER BY SUM(SALES_QTY) DESC) <= 10안의 ORDER BY는 그룹화가 안 된 상태이기 때문에 ORDER BY문이 실행될 수 없다!!
BackJoon 풀이 - 파이썬 '%' 기호 출력하는 법
💡 소수점 출력 포맷과 %를 같이 표현하고 싶을 때
: %를 %%로 입력하면 된다!
A = 5.1234567
print("%.3f%%" %A)
👉 %.3f%%의 처음 %는 출력 포맷을 의미하고 %%는 "%"기호를 의미한다!
👉 5.123%로 출력된다.