해당 문제는 Programmers에서 사용한 문제이며 모든 테이블의 자료와 출처는 Programmers임을 밝힙니다.
해당 글에서는 UNION, WITH AS, GROUP BY를 이용하여 푸는 문제로 초보자가 하기에는 쉬움 정도의 난이도를 가지고 있는 것 같습니다.
해당 문제 원본을 확인 하시려면 해당 사이트를 들어가시면 될 것 같습니다.
시작하겠습니다.
7월 아이스크림 총 주문량과 상반기의 아이스크림 총 주문량을 더한 값이 큰 순서대로 상위 3개의 맛을 조회하는 SQL 문을 작성해주세요.
우선 제가 푼 방식은 가독성이 좋게 만든 것이지 좋은 코드는 아닌 듯 합니다. 그래서 좀 더 쉬운 코드도 있다고 말씀 드리고 싶습니다.
이 문제는 상반기 테이블과 7월 테이블이 있습니다. 해당 테이블들은 모두 같은 컬럼명을 가지고 있습니다 해당 TOTAL_ORDER라는 컬럼에 있는 값을 FLAVOR에 따라 모두 더해주면 되는 것입니다.
즉, 7월 FLAVOR와 상반기 FLAVOR의 모든 TOTAL_ORDER를 더해주고 상위 3개를 가져와주면 됩니다.
1. 테이블 마다 FLAVOR를 기준으로 그룹화하기
-- 상반기 데이터
SELECT FLAVOR, SUM(TOTAL_ORDER) AS TOTAL1
FROM FIRST_HALF
GROUP BY FLAVOR
-- 7월 데이터
SELECT FLAVOR, SUM(TOTAL_ORDER) AS TOTAL2
FROM JULY
GROUP BY FLAVOR
단순하게 GROUP BY를 이용하여 묶어준 뒤 계산만 해주었습니다.
2. 두 개 테이블 UNION ALL을 통해 한 테이블로 만들기
WITH CTE AS (SELECT FLAVOR, SUM(TOTAL_ORDER) AS TOTAL1
FROM FIRST_HALF
GROUP BY FLAVOR
UNION ALL
SELECT FLAVOR, SUM(TOTAL_ORDER) AS TOTAL2
FROM JULY
GROUP BY FLAVOR)
위의 이미지와 캍이 두 개의 테이블을 UNION을 통해 묶어주었습니다.
그리고 WITH문을 통해 새롭게 CTE라는 이름을 지어서 테이블을 새롭게 만들어 주었습니다.(가독성이 좋음)
이제 해당 테이블에서 GROUP BY를 하여 묶어주고 더해주면 값이 나올 것 같습니다.
3. CTE테이블을 이용해서 정렬하고 상위 3개 값 추출하기
WITH CTE AS (SELECT FLAVOR, SUM(TOTAL_ORDER) AS TOTAL1
FROM FIRST_HALF
GROUP BY FLAVOR
UNION ALL
SELECT FLAVOR, SUM(TOTAL_ORDER) AS TOTAL2
FROM JULY
GROUP BY FLAVOR)
SELECT FLAVOR
FROM CTE
GROUP BY FLAVOR
ORDER BY SUM(TOTAL1) DESC
LIMIT 3
위의 코드와 같이 FLAVOR를 통해 그룹화 해줍니다.
그리고 ORDER BY에서 SUM() 집계함수를 이용하여 정렬 후 LIMIT를 사용해주면 해당 코드는 정답이 됩니다.
이상으로 Programmers 문제 풀이를 마치도록 하겠습니다.
'Data Analyst > SQL' 카테고리의 다른 글
[SQL] Programmers 문제 풀기(자동차 대여 기록에서 장기/단기 대여 구분하기) (1) | 2024.11.10 |
---|---|
[SQL] Programmers 문제 풀기(특정 기간동안 대여 가능한 자동차들의 대여비용 구하기) (0) | 2024.11.07 |
[SQL] Programmers 문제 풀기(년, 월, 성별 별 상품 구매 회원 수 구하기) (0) | 2024.11.05 |
[SQL] Programmers 문제 풀기(업그레이드 할 수 없는 아이템 구하기) (0) | 2024.11.04 |
[SQL] Programmers 문제 풀기(연간 평가점수에 해당하는 평가 등급 및 성과금 조회하기) (0) | 2024.11.01 |