[TIL] 깨달음

Jeong Min·2025년 5월 15일
0

SQLD 자격증 공부 겸 이외에 것도 계속 배우고 있는데 정말 큰 도움이 된다.

개인 과제 2번 문제 기존 풀이

문제 2.
payments 테이블에서 각 결제 방식(payment_type)별 결제 금액의 합계와 해당 결제 방식이 전체 결제 금액에서 차지하는 비율을 계산하세요.
결과 컬럼: payment_type, total_payment_value, payment_percentage

결제 방식 별 결제 금액 합계와 그 비율을 백분율로 나타내야하는 문제.

나의 기존풀이는 ?

머리 싸매고 고민한 결과..

답변은 나오지만 뭔가 찝찝하다.

이 이후로 더 공부하면서 배운 것.
서브쿼리, 각종 함수들을 활용해서 다시 문제를 풀이해 보았다.

SELECT
mp.payment_type,
SUM(mp.payment_value) as '합계 금액',
CONCAT(ROUND(SUM(mp.payment_value)/a.total_value*100,2),'%') '비율'
FROM
marketer_payments AS mp,
(select
sum(payment_value) AS total_value
from
marketer_payments) AS a
GROUP BY
mp.payment_type

결과.

먼저 기존에 풀었던 것 처럼 합계를 따로 찾아내서 그대로 넣는 것이 아니라, 서브쿼리를 활용해서 절 안에 넣었다.

(select
sum(payment_value) AS total_value
from
marketer_payments) AS a

이러면 기존 합계만 구해서 열에 넣을 수 있다.

이제 이 다음은 기존에 했던 것의 합계 대신 저 컬럼을 넣는다.

SUM(mp.payment_value)/a.total_value

하지만 이러면 문제는 비율이 0.-----으로 나온다는 점...

이것을 해결하기 위해서? 비율에다 100을 곱해준다.

SUM(mp.payment_value)/a.total_value*100

79.------으로 나오게 된다.
더 완벽하게 하기 위해서 소수점은 두자리까지만 보여주자.
새롭게 배운 함수 ROUND(컬럼,숫자) = 컬럼의 소수점을 쓴 숫자까지 올려서 보여준다

ROUND(SUM(mp.payment_value)/a.total_value*100,2

이러면 79.OO 까지 두 번째 소수점 까지만 보여진다.
더 완벽하게 비율이란 것을 보여줄 수 있도록 '%'를 붙이자.
기존에 배웠던 CONCAT 함수 (A,B)를 나열해서 보여준다.

CONCAT(ROUND(SUM(mp.payment_value)/a.total_value*100,2),'%') '비율'

이렇게까지하면 원래 풀었던 0.-------이 아니라 OO.OO%로 나온다

0개의 댓글