sql/Advent of SQL 2025

SQL 문제 풀이 챌린지(6~10)

gooreumsea 2026. 1. 14. 03:05

저작권 문제로 인해, 직접 작성한 쿼리문만 공개.

 

 

 

6. DVD 대여점 우수 고객 찾기

https://solvesql.com/problems/dvdrental-vip/

SELECT
  R.customer_id AS customer_id
FROM rental AS R
  INNER JOIN customer AS C ON R.customer_id = C.customer_id
WHERE active = 1
GROUP BY R.customer_id
HAVING COUNT(*) >= 35

 

 

 

7. 이틀 연속 미세먼지가 나빠진 날
https://solvesql.com/problems/bad-finddust-days-in-a-row/

SELECT
  measured_at AS date_alert
FROM (
    SELECT
        measured_at,
        pm10,
        LAG(pm10, 1) OVER (ORDER BY measured_at) AS prev_pm10,
        LAG(pm10, 2) OVER (ORDER BY measured_at) AS prev2_pm10
    FROM measurements
) AS sub

WHERE pm10 >= 30
AND pm10 > prev_pm10
AND prev_pm10 > prev2_pm10
 

 

 

8. 크리스마스를 기념할 완벽한 와인 찾기 🥂

https://solvesql.com/problems/wines-for-friends/

WITH total_avg AS (
  SELECT
    AVG(density) AS avg_density,
    AVG(residual_sugar) AS avg_residual_sugar
  FROM wines
)
, white_avg AS (
  SELECT
    AVG(pH) AS avg_ph,
    AVG(citric_acid) AS avg_citric_acid
  FROM wines
  WHERE color = 'white'
)

SELECT *
FROM wines
WHERE color = 'white'
  AND quality >= 7
  AND density > (SELECT avg_density FROM total_avg)
  AND residual_sugar > (SELECT avg_residual_sugar FROM total_avg)
  AND pH < (SELECT avg_ph FROM white_avg)
  AND citric_acid > (SELECT avg_citric_acid FROM white_avg);




9. 두 대회 연속으로 출전한 기록이 있는 배구 선수

https://solvesql.com/problems/volleyball-players-in-two-consecutive-olympics/

WITH event_record AS (
  SELECT
    year,
    name,
    a.id
  FROM records AS r
      INNER JOIN teams AS t ON r.team_id = t.id
      INNER JOIN events AS e ON r.event_id = e.id              
      INNER JOIN games AS g ON r.game_id = g.id
      INNER JOIN athletes AS a ON r.athlete_id = a.id
  WHERE team = 'KOR'
  AND event = 'Volleyball Women''s Volleyball'
)

, if_sequence AS (
    SELECT 
      year,
      name,
      id,
      LAG(year) OVER (PARTITION BY id ORDER BY year) AS prev_year
    FROM event_record
)

SELECT DISTINCT
  id,
  name
FROM if_sequence
WHERE year = prev_year + 4




10. 올림픽 메달이 있는 배구 선수
https://solvesql.com/problems/volleyball-players-with-medals/

WITH event_record AS (
  SELECT
    a.id,
    name,
    medal
  FROM records AS r
      INNER JOIN teams AS t ON r.team_id = t.id
      INNER JOIN events AS e ON r.event_id = e.id              
      INNER JOIN games AS g ON r.game_id = g.id
      INNER JOIN athletes AS a ON r.athlete_id = a.id
  WHERE team = 'KOR'
  AND event = 'Volleyball Women''s Volleyball'
  AND medal IS NOT NULL
)

SELECT
  id,
  name,
  GROUP_CONCAT(DISTINCT medal ORDER BY medal SEPARATOR ',') AS medals
FROM event_record
GROUP BY id, name