[프로그래머스]SQL쿼리테스트 Lv4(2)

2025. 8. 3. 16:37·코딩 테스트/02. SQL

1. 년,월, 성별 별 상품 구매 회원 수 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/131532

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

SELECT 
    YEAR(S.SALES_DATE) AS YEAR, 
    MONTH(S.SALES_DATE) AS MONTH, 
    I.GENDER,
    COUNT(DISTINCT(S.USER_ID)) AS USERS
FROM 
	ONLINE_SALE AS S
	LEFT JOIN USER_INFO AS I
	ON S.USER_ID = I.USER_ID
WHERE I.GENDER IS NOT NULL
GROUP BY YEAR(S.SALES_DATE), MONTH(S.SALES_DATE), I.GENDER
ORDER BY 1, 2, 3;

POINT!

구매 건수가 아니라 구매 회원수이기 때문에 DISTINCT를 써야한다.

2. 서울에 위치한 식당 목록 출력하기

https://school.programmers.co.kr/learn/courses/30/lessons/131118

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

SELECT
    I.REST_ID,
    I.REST_NAME,
    I.FOOD_TYPE,
    I.FAVORITES,
    I.ADDRESS,
    ROUND(AVG(R.REVIEW_SCORE),2) AS SCORE
FROM REST_REVIEW AS R
	LEFT JOIN REST_INFO AS I
	ON R.REST_ID = I.REST_ID
WHERE I.ADDRESS LIKE '서울%'
GROUP BY R.REST_ID
ORDER BY SCORE DESC, I.FAVORITES DESC;

POINT! 

SELECT에서 평균을 구하잖아요. 이때 가게마다의 평균을 구해야한다는 것을 잊으시면 안됩니다!

그래서 GROUP BY를 해줘야하는 겁니다 ㅎㅎ

3. 우유와 요거트가 담긴 장바구니

https://school.programmers.co.kr/learn/courses/30/lessons/62284

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

SELECT CART_ID
FROM (SELECT CART_ID, GROUP_CONCAT(NAME) AS ITEMS
    FROM CART_PRODUCTS
    GROUP BY CART_ID ) AS TOTAL
WHERE ITEMS LIKE '%Milk%' 
    AND ITEMS LIKE '%Yogurt%'
ORDER BY CART_ID

4. 주문량이 많은 아이스크림 조회하기

https://school.programmers.co.kr/learn/courses/30/lessons/133027

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

이 문제는 지금까지 풀어온 문제랑 다릅니다!

단순하게 조인을 하면 안됩니다.

왜냐하면 FIRST_HALF에는 7월 데이터가 없으니 JULY랑 그냥 JOIN하면 7월에만 팔린 맛이 누락되거나, 누락된 값이 NULL로 나올 수 있어요.

 

풀이 방법

① 두 테이블을  UNION ALL로 합친다
② FLAVOR로 GROUP BY해서 총합으로 정렬을 한다
③ TOP 3 추출한다.

 

SELECT FLAVOR
FROM (
    SELECT FLAVOR, TOTAL_ORDER FROM FIRST_HALF
    UNION ALL
    SELECT FLAVOR, TOTAL_ORDER FROM JULY
) AS ALL_ORDERS
GROUP BY FLAVOR
ORDER BY SUM(TOTAL_ORDER) DESC
LIMIT 3;

UNION ALL이란

: 두 개 이상의 SELECT 결과를  그대로 아래로 이어붙이는 것입니다. 단, 컬럼 개수와 타입이 맞아야해요.

각각 다른 테이블에서 동일한 구조의 데이터를 모아서 한번에 보고싶을 때 사용합니다.

 

문법 구조

SELECT 컬럼1, 컬럼2
FROM 테이블A
UNION ALL
SELECT 컬럼1, 컬럼2
FROM 테이블B;
  • UNION ALL :  중복 허용, 두 SELECT 결과를 이어붙임
  • UNION :이어 붙이되, 중복 제거

5. 연간 평가점수에 해당하는  평가 등급 및 성과금 조회하기

https://school.programmers.co.kr/learn/courses/30/lessons/284528

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

WITH RANK_TABLE AS (
    SELECT
        EMP_NO,
        AVG(SCORE) AS AVG_SCORE,
        CASE
            WHEN AVG(SCORE) >= 96 THEN 'S'
            WHEN AVG(SCORE) >= 90 THEN 'A'
            WHEN AVG(SCORE) >= 80 THEN 'B'
            ELSE 'C' 
        END AS GRADE
    FROM HR_GRADE 
    GROUP BY EMP_NO
)
    
SELECT 
    EMP.EMP_NO, 
    EMP.EMP_NAME, 
    R.GRADE,
    CASE
        WHEN R.GRADE = 'S' THEN EMP.SAL * 0.2
        WHEN R.GRADE = 'A' THEN EMP.SAL * 0.15
        WHEN R.GRADE = 'B' THEN EMP.SAL * 0.1
        ELSE 0
    END AS BONUS
FROM HR_EMPLOYEES AS EMP
    JOIN RANK_TABLE AS R
    ON EMP.EMP_NO = R.EMP_NO
ORDER BY EMP.EMP_NO;

'코딩 테스트 > 02. SQL' 카테고리의 다른 글

[solvesql] Lv1 문제 풀이 및 함수 정리  (3) 2025.08.07
[프로그래머스]SQL쿼리테스트 Lv4(3)  (6) 2025.08.04
[프로그래머스]SQL 쿼리테스트 Lv4(1)  (1) 2025.08.01
[윈도우 함수]ROW_NUMBER()함수  (3) 2025.08.01
[프로그래머스]SQL 쿼리테스트 Lv3(3)  (6) 2025.07.30
'코딩 테스트/02. SQL' 카테고리의 다른 글
  • [solvesql] Lv1 문제 풀이 및 함수 정리
  • [프로그래머스]SQL쿼리테스트 Lv4(3)
  • [프로그래머스]SQL 쿼리테스트 Lv4(1)
  • [윈도우 함수]ROW_NUMBER()함수
Growth DA Log
Growth DA Log
Growth DA Log 님의 블로그 입니다.
  • Growth DA Log
    Growth DA Log님의 블로그
    Growth DA Log
  • 전체
    오늘
    어제
    • 분류 전체보기 (125)
      • TIS_COMPANY (6)
      • 코딩 테스트 (61)
        • 01. Python (3)
        • 02. SQL (58)
      • 데이터 분석 (53)
        • 01. BigQuery (9)
        • 02. GA4 (1)
        • 02-1. GA4를 더 잘 다루기 위한 마케팅 개.. (5)
        • 03. streamlit (5)
        • 04. Git (12)
        • 05. 데이터 엔지니어링 (3)
        • 06. 데이터 모델링 (11)
        • 07. Excel (0)
        • 08. Tableau (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    solvesql
    AARRR
    코테
    cross_join
    Reset
    SQL
    revert
    streamlit
    코드잇스프린트후기
    코딩테스트
    tableaubootcamp
    tableau
    이행성
    ROW_NUMBER
    윈도우함수
    쿼리테스트
    DENSE_RANK
    rank
    git
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Growth DA Log
[프로그래머스]SQL쿼리테스트 Lv4(2)
상단으로

티스토리툴바