본문 바로가기
Programming/SQL

[MySQL] 코딩테스트 연습 예제 1

by 코딩하는 금융인 2020. 9. 7.

*본 문제는 모 기업 코딩테스트에서 나온 문제를 제 방식대로 변형한 문제입니다.


문제. Customers 내에 구매한 고객(member_no)들에 대하여 고객별 마지막 구매 완료 주문건의 쿠폰할인률을 구하는 SQL 쿼리를 구하시오.

 

* 쿠폰 할인률(last_dc) % : 쿠폰할인액(coupon_price)/주문가격(order_price) *100

* 단, 쿠폰을 쓰지 않는 주문건의 할인률은 0으로 가정한다.

* 쿠폰 할인률의 소수점 자리수는 2자리까지 출력한다.

 

Customers 스키마 (예시 테이블)

* 해당 테이블은 임의로 값을 넣은 예시입니다.

Customers

반응형

나의 풀이 in MySQL

SELECT member_id, CONCAT(round(coupon_price/order_price*100,2),'%') AS last_dc
FROM (SELECT *, IFNULL(coupon_price, 0), MAX(order_time) FROM Customers 
	WHERE buy_yn = 'y' GROUP BY member_id) A

FROM에 서브 쿼리를 활용하여 풀었습니다. 문제의 조건에 부합하기 위해 여러 가지 함수를 사용했고 최대한 간결하게 표현했습니다.

먼저, 고객별 할인률을 조회해야하므로 고객 id와 할인률을 조건대로 만들었습니다. round는 소수점 자릿수까지 반올림해주는 함수, concat은 문자를 합쳐주는 함수입니다.

구매 완료인 고객 중이므로 WHERE문에 조건을 넣어주었고 고객별 가장 마지막 구매 시기인 조건에 맞게 GROUP BY와 MAX를 활용했습니다. 또한, coupon_price가 NA일 경우, IFNULL을 이용하여 NA일 때 0의 값을 넣어주었습니다.

 

코드 결과

SQL 출력 결과

 

* 해당 문제는 제가 여러 SQL 관련 코딩테스트를 치르며 문제와 테이블 모두 만든 문제입니다. 저처럼 SQL 관련 코딩테스트를 준비하시는 사람들에게 조금의 도움이라도 될까 생각하며 만들었습니다.

 

다른 문제들 보러가기
반응형

댓글