더북(TheBook)

3 정답

SELECT b.countryname,
       DATE_FORMAT(a.issue_date, '%Y/%m') months,
       SUM(a.cases) case_num,
       SUM(a.new_vaccinations) vaccine_num
  FROM covid19_data a
 INNER JOIN covid19_country b
    ON a.countrycode = b.countrycode
 WHERE a.issue_date >= '2020-10-01'
   AND EXISTS (SELECT 1
                 FROM (SELECT countrycode,
                              SUM(new_vaccinations)
                         FROM covid19_data c
                        WHERE new_vaccinations > 0
                        GROUP BY 1
                        ORDER BY 2 DESC
                        LIMIT 10
                      ) c
                 WHERE a.countrycode = c.countrycode
               )
GROUP BY 1, 2;

실행결과

해설 첫 번째 서브쿼리에서 new_vaccinations 값이 0보다 큰 건에 대해 국가별로 이 칼럼의 전체 합계를 구하고, LIMIT 절을 사용해 백신 접종자 수 전체 합계가 많은 상위 10개 국가를 구합니다. 그리고 이 쿼리를 다시 서브쿼리로 만들어 메인쿼리의 covid19_data 테이블과 countrycode가 같은 건만 조회하도록 EXISTS 연산자를 사용합니다. 그리고 메인쿼리에서는 국가별, 월별, 확진자 수와 백신 접종자 수를 구합니다.

결과를 보면 백신 접종이 시작된 2020년 12월부터 일부 국가에서 확진자 수가 줄어드는 경향이 있습니다. 하지만 그렇지 않은 국가도 있죠. 이때는 백신 접종이 초기 단계였고 2차 접종을 한 후 일정 기간이 지나야 효과를 알 수 있기 때문이죠. 따라서 전반적으로 백신 접종으로 확진자 수가 줄어드는 경향이 있어 보이지만, 2021년 2월까지 데이터로는 이를 확신할 수 없습니다. 최신 데이터로 업데이트해서 직접 쿼리를 작성해 보면 좋은 연습이 될 겁니다.

본문으로

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.