1. Queries Quality and Percentage 문제 정리
문제 설명
- Queries 테이블에서 query_name별로 데이터를 그룹화하고, 다음 값을 구해야 함.
- quality: (rating / position) 값의 평균
- poor_query_percentage: rating < 3인 데이터의 비율(%) 계산
- 결과는 소수점 두 자리까지 반올림
SQL 코드
SELECT
query_name,
ROUND(AVG(rating / position), 2) AS quality,
ROUND(SUM(CASE WHEN rating < 3 THEN 1 ELSE 0 END) / COUNT(*) * 100, 2) AS poor_query_percentage
FROM Queries
GROUP BY query_name;
예제 설명

- quality 계산: ((5/1) + (5/2) + (1/200)) / 3 = 2.50
- poor_query_percentage 계산: (1/3) * 100 = 33.33
2. Daily Leads and Partners 문제 정리
문제 설명
- DailySales 테이블에서 특정 날짜(date_id)와 제조사(make_name)별로 고유한 lead_id와 partner_id 개수를 구해야 함.
SQL 코드
SELECT
date_id,
make_name,
COUNT(DISTINCT lead_id) AS unique_leads,
COUNT(DISTINCT partner_id) AS unique_partners
FROM DailySales
GROUP BY date_id, make_name;
예제 설명

- toyota (2020-12-8): 고유한 lead_id = {0,1}, 고유한 partner_id = {0,1,2}
- toyota (2020-12-7): 고유한 lead_id = {0}, 고유한 partner_id = {1,2}
- honda (2020-12-8): 고유한 lead_id = {1,2}, 고유한 partner_id = {1,2}
- honda (2020-12-7): 고유한 lead_id = {0,1,2}, 고유한 partner_id = {1,2}
3. 핵심 SQL 개념 정리
집계 함수(Aggregate Functions)
함수 설명
COUNT(*) | 전체 행 개수 |
COUNT(column_name) | NULL 제외한 특정 컬럼 개수 |
COUNT(DISTINCT column_name) | 중복을 제외한 고유한 값 개수 |
AVG(column_name) | 평균값 계산 |
SUM(column_name) | 합계 계산 |
ROUND(value, 2) | 소수점 2자리 반올림 |
GROUP BY를 활용한 요약
- 특정 컬럼(예: query_name, date_id)을 기준으로 그룹화한 후, 각 그룹별로 집계 연산 수행
- 예제:
SELECT query_name, COUNT(*) AS total_queries FROM Queries GROUP BY query_name;
COUNT vs SUM + CASE WHEN
방법 코드 특징
COUNT(CASE WHEN 조건 THEN 1 END) | COUNT(CASE WHEN rating < 3 THEN 1 END) | NULL을 자동으로 제외하므로 ELSE 0 불필요 |
SUM(CASE WHEN 조건 THEN 1 ELSE 0 END) | SUM(CASE WHEN rating < 3 THEN 1 ELSE 0 END) | 모든 행을 포함해야 할 경우 사용 |
ELSE 0을 안 쓰는 이유
- COUNT(CASE WHEN ...)에서 ELSE 0을 추가하면 0도 개수에 포함될 수 있어 의도치 않은 값이 나올 수 있음.
- SUM(CASE WHEN ...)을 사용할 경우에는 ELSE 0을 추가해야 전체 합이 정확하게 계산됨.
4. 정리
집계 함수 요약 | COUNT, AVG, SUM 등을 사용해 데이터를 한 줄로 요약 | SELECT COUNT(*) FROM Queries; |
GROUP BY를 사용한 데이터 요약 | 특정 기준(예: query_name, date_id)으로 그룹화하여 집계 수행 | GROUP BY query_name |
COUNT에서 ELSE 0을 안 쓰는 이유 | COUNT는 NULL을 자동으로 제외하므로 필요 없음 | COUNT(CASE WHEN rating < 3 THEN 1 END) |
SUM에서 ELSE 0을 쓰는 이유 | SUM은 모든 행을 포함하므로 0을 명시적으로 지정해야 함 | SUM(CASE WHEN rating < 3 THEN 1 ELSE 0 END) |
728x90
'코딩스터디' 카테고리의 다른 글
LEETCODE : SQL - JOIN (0) | 2025.03.10 |
---|---|
Leetcode SQL : Not boring Movies, Article Views (0) | 2025.03.05 |
SQL : 프로그래머스 GROUP BY 동명 동물 수 찾기, 고양이와 개는 몇마리 있을까? (0) | 2025.03.03 |
SQL : SUM, MAX, MIN 가격이 제일 비싼 식품의 정보 출력하기, 가격이 제일 비싼 식품의 정보 출력하기 (0) | 2025.02.26 |
[프로그래머스] 파이썬, 수 조작하기1 (0) | 2024.10.11 |