22.01.04 [7] TIL : SQL 예제 풀이) 오답 + WHERE절에 순위 함수 작성하면 안 되는 이유 / 백준 풀이 - 파이썬 % 기호 출력

KSH·2022년 1월 4일
1
post-thumbnail

SQL 오답노트 + WHERE절에 순위 함수 작성하면 안 되는 이유

예제) SALES 테이블을 활용하여, 구매수량이 높은 상위 10명을 조회하시오.
(비회원의 회원번호 "9999999"는 제외하시오.)

  1. 이 문제에서 순위 함수를 사용하여 정렬할 때 문제에서 단순히 구매수량이라고 해서 SALES_QTY를 기준으로 정렬했는데 문제의 답과 달랐다.
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)를 해야한다.
(회원번호 별로 그룹화를 했기 때문에 합을 해도 회원번호 별로 합해진다.)


  1. 정렬을 한 후 상위 10명을 조회 하려고 할 때
    👉 이때 10명 조회하려고 WHERE절에 순위 함수를 썼다.
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;

이렇게 위의 코드에서 바로 AND문만 사용하여 상위 10명을 조회하려고 했는데 오류가 발생했다.

💡 오류 발생 이유

원리 : 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%로 출력된다.

profile
성실히 살아가는 비전공자

0개의 댓글