문제
테이블에서 생산일자가 2022년 5월인 식품들의 식품 ID, 식품 이름, 총매출을 조회하는 SQL을 작성한다.
최종 결과는 총매출을 기준으로 내림차순 정렬해서 출력한다.
ORDER 테이블에서 주문량(amount)을 집계한 뒤
PRODUCT 테이블의 생산일자가 2022년 05월인 제품의 금액을 곱해서 매출을 출력했다.
풀이 1 (MySQL)
SELECT FINFO.PRODUCT_ID
, FINFO.PRODUCT_NAME
, PTOTAL.AMOUNT*FINFO.PRICE AS TOTAL_SALES
FROM
(SELECT PRODUCT_ID
, SUM(AMOUNT) AS AMOUNT
FROM FOOD_ORDER
WHERE DATE_FORMAT(PRODUCE_DATE,'%Y%m')='202205'
GROUP BY PRODUCT_ID) PTOTAL, FOOD_PRODUCT FINFO
WHERE PTOTAL.PRODUCT_ID = FINFO.PRODUCT_ID
ORDER BY TOTAL_SALES DESC
;
풀이 2 (Oracle)
SELECT FINFO.PRODUCT_ID
, FINFO.PRODUCT_NAME
, PTOTAL.AMOUNT*FINFO.PRICE AS TOTAL_SALES
FROM
(SELECT PRODUCT_ID
, SUM(AMOUNT) AS AMOUNT
FROM FOOD_ORDER
WHERE TO_CHAR(PRODUCT_DATE,'YYYYMM')='202205'
GROUP BY PRODUCT_ID) PTOTAL
, FOOD_PRODUCT FINFO
WHERE PTOTAL.PRODUCT_ID = FINFO.PRODUCT_ID
ORDER BY TOTAL_SALES DESC
;
이상한 점은 오라클에선 PRODUCE_DATE 필드를 못 읽었다..
PRODUCT_DATE 로 실행하면 결과는 MySQL과 동일하게 나오고 채점할땐 틀렸다 나왔다..;;
아마도 프로그래머스의 오류인 듯.. 싶다.
MySQL, Oracle 같은 로직으로 풀었는데 MySQL은 정답, Oracle은 틀림으로 제출됐다....
첨엔 오라클로 풀었는데 날린 시간 생각하니 열받는다 ㅂㄷㅂㄷ
혹시나 제 sql이 문제라면 댓글 부탁드립니다..
반응형
'Problem Solving > Programmers' 카테고리의 다른 글
프로그래머스 (Level 3) : 정수 삼각형/ C++, DP/ vector 최대값 *max_element, greater<>() (4) | 2022.10.11 |
---|---|
프로그래머스 (Level 4) : 그룹별 조건에 맞는 식당 목록 출력하기/ (SQL) MySQL, Oracle/ JOIN, RANK() (0) | 2022.10.10 |
프로그래머스 (Level 2) : 전화번호 목록/ C++ (0) | 2022.10.09 |
프로그래머스 (Level 2) : 카카오프렌즈 컬러링북/ C++, BFS/ 2017 카카오코드 예선 (0) | 2022.10.09 |
프로그래머스 (Level 2) : 영어 끝말잇기 /C++, map (해쉬, 딕셔너리) (0) | 2022.10.09 |