✔️ 난이도 2
artworks 테이블에서는 MoMA가 소장한 작품의 정보가 있습니다. 작품 정보 중 credit 컬럼에 'gift'라는 단어가 등장하는 작품은 MoMA가 다른 사람이나 단체로 부터 기증 받은 기증품이라는 뜻입니다.
소장품 중 부분 기증품을 포함한 기증품의 비율이 얼마나 되는지 계산하는 쿼리를 작성해주세요.
➡️ 집계 내용
"기증품을 포함한 기증품".. 이라는 말이 살짝 어색하게도 느껴진다.
어쩌면 "기증품을 포함한 소장품"이 더 적합한 표현일지도 모르겠다.
스키마를 살펴보면 artworks 테이블에는 artwork_id라는 컬럼이 존재한다.
id가 존재한다는 부분에서 하나의 소장품에 기증품과 기증품이 아닌 것이 섞여있을 수 있다.
조건에 맞게 필터링 후 artwork_id를 중복을 제거하여 카운트해줘야함을 알 수 있다.
기증품을 포함한 소장품의 수는 서브쿼리를 이용해서 구했다.
서브쿼리를 통해 credit 컬럼의 레코드중 'gift'를 포함하는 레코드를 필터링한 후,
그 레코드의 중복을 제거한 artwork_id의 수를 집계한다.
비율을 구하기 위해서는 전체 소장품의 수도 체크해야한다.
이는 조건이 없을 뿐 위와 같다.
다만 조건이 없으니 서브쿼리로 작성하지 않고 바로 집계함수만 적용했다.
이를 (기증품을 포함한 소장품의 수) / (전체 소장품의 수)와 같이 나눠주면 비율이 된다.
다만 정수형 나누기 정수형의 형태이기 때문에 둘중 하나의 타입을 바꿔주거나 앞에 1.0을 곱해주면 실수형으로 집계 결과를 얻을 수 있다.
기증품의 비율은 백분율로 계산되어야하고, 소수점 아래 넷째 자리에서 반올림 해 셋째 자리까지 표시 되어야 합니다.
➡️ 계산 포맷
이 비율을 소수점 셋째 자리까지 나타내는 백분율으로 바꿔야한다.
실수형으로 변환하는 과정에서 1.0 대신 100.0으로 바꿔주고,
round함수를 통해 셋째 자리까지만 나타내도록 했다.
SELECT
round(
100.0 * (
SELECT count(DISTINCT artwork_id)
FROM artworks
WHERE credit LIKE '%gift%'
) / count(DISTINCT artwork_id)
, 3) ratio
FROM artworks