이번 쿼리는 그리 어렵지 않습니다. gender, survived 두 칼럼을 GROUP BY 절과 SELECT 절에 명시하고 COUNT() 함수를 사용하면 성별 생존자 수와 사망자 수를 구할 수 있습니다. 결과를 보니 여성보다 남성이 더 많이 사망했습니다.
이번에는 성별 비율을 구해 볼까요?
코드 12-24
SELECT gender, survived, cnt,
ROUND(cnt / SUM(cnt) OVER (PARTITION BY gender
ORDER BY gender), 2) rates
FROM (SELECT gender, survived, COUNT(*) cnt
FROM titanic
GROUP BY gender, survived
) t;
실행결과
코드 12-24는 코드 12-23에서 사용한 쿼리를 서브쿼리(파생 테이블)로 만들면서 인원수를 구하는 COUNT() 함수 결과에 cnt라는 별칭을 붙였습니다. 그리고 메인쿼리에서 윈도우를 사용해 각 로우에 있는 인원수를 성별 파티션을 대상으로 더한 인원수로 나누었습니다. 예를 들어 남성 사망자 수인 734를 전체 남성 수 843(734 + 109)로 나누니 약 0.87이 나왔습니다. 다시 말해, 남성의 약 87%가 사망했음을 알 수 있습니다. 생존자 수와 사망자 수를 원래 숫자로 보는 것보다는 비율로 보면 데이터를 파악하기가 더 쉬워집니다.