(solvesql)Advent of SQL 2025 8일차

2025. 12. 14. 21:32·코딩 테스트/02. SQL

01. 작성 쿼리

SELECT *
FROM wines
WHERE color = 'white'
  AND quality >= 7
  AND density > (SELECT AVG(density) FROM wines) 
  AND residual_sugar > (SELECT AVG(residual_sugar) FROM wines)
  AND pH < (SELECT AVG(pH) FROM wines WHERE color = 'white' )
  AND citric_acid > (SELECT AVG(citric_acid) FROM wines WHERE color = 'white' )

 


02. 쿼리 결과

 


03. 다른 풀이 방법

지금 풀이는  같은 테이블을 여러 번 스캔해야하기 때문에  데이터가클 경우 성능이 저하될 가능성이 높고,

유지보수 시 평균 조건 수정이 번거롭습니다

그래서 CTE를 이용해서 조건이 잘 보이고, 수정도 쉽게 작성하면 아래와 같습니다.

WITH avg_all AS (
    SELECT
        AVG(density) AS avg_density,
        AVG(residual_sugar) AS avg_residual_sugar
    FROM wines
),
avg_white AS (
    SELECT
        AVG(pH) AS avg_pH,
        AVG(citric_acid) AS avg_citric_acid
    FROM wines
    WHERE color = 'white'
)
SELECT *
FROM wines w
CROSS JOIN avg_all a
CROSS JOIN avg_white aw
WHERE w.color = 'white'
  AND w.quality >= 7
  AND w.density > a.avg_density
  AND w.residual_sugar > a.avg_residual_sugar
  AND w.pH < aw.avg_pH
  AND w.citric_acid > aw.avg_citric_acid;

CROSS JOIN을  사용한 이유

CROSS JOIN은 두 테이블의 "행(row)수"를 기준으로 가능한 모든 조합을 만드는 JOIN입니다

그렇기 때문에  CROSS JOIN을 사용해 평균 기준값을 모든 와인 행에 적용한겁니다

 

위에 쿼리에서 사용한 avg_all, avg_white 같은 with절에서 생성된 테이블은  

개별와인을 식별하거나 특정 wine 행과 1:1로 매칭하기 위한 용도가 아닙니다.

그냥 모든 행에 동일하게 적용할 기준값이죠

그래서 원본 테이블의 모든 행에 그대로 붙여 비교하는 것이 핵심입니다

 

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

[solvesql]Advent of SQL 2025 9일차  (0) 2025.12.14
(solvesql)Advent of SQL 2025 7일차  (0) 2025.12.08
(solvesql) Advent of SQL 2025 6일차  (0) 2025.12.08
(solvesql) Advent of SQL 2025 5일차  (0) 2025.12.08
[solvesql_Lv3] 미세먼지 수치의 계절간 차이(중앙값구하기)  (0) 2025.10.14
'코딩 테스트/02. SQL' 카테고리의 다른 글
  • [solvesql]Advent of SQL 2025 9일차
  • (solvesql)Advent of SQL 2025 7일차
  • (solvesql) Advent of SQL 2025 6일차
  • (solvesql) Advent of SQL 2025 5일차
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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Growth DA Log
(solvesql)Advent of SQL 2025 8일차
상단으로

티스토리툴바