데이터를 효과적으로 활용하기 위한 조직(팀 화해) 내 데이터 리터러시의 활용 방법
서브쿼리 (Subquery)
→ 쿼리 안에 또 다른 쿼리를 넣어서 중간 결과를 기반으로 추가 작업을 수행할 수 있음
→ 복잡한 조건을 정리하거나, 계산 결과를 다시 활용할 때 유용
JOIN (조인)
→ INNER JOIN, LEFT JOIN 등으로 여러 테이블의 데이터를 연결
→ 오늘은 food_orders와 customers 테이블을 customer_id로 연결해서 사용
여러 조건을 한 번에 처리하는 방법
→ CASE WHEN, BETWEEN, AND, OR 등을 활용해서
복잡한 분류 작업을 하나의 SELECT문에서 처리하는 방식 연습
→ 예: 식당별 평균 주문금액과 주문자 연령에 따라 그룹 나누기
SELECT restaurant_name,
CASE
WHEN price <=5000 THEN 'price_group1'
WHEN price >5000 AND price <=10000 THEN 'price_group2'
WHEN price >10000 AND price <=30000 THEN 'price_group3'
ELSE 'price_group4'
END AS price_group,
CASE
WHEN age <30 THEN 'age_group1'
WHEN age BETWEEN 31 AND 39 THEN 'age_group2'
WHEN age BETWEEN 40 AND 49 THEN 'age_group3'
ELSE 'age_group4'
END AS age_group
FROM (
SELECT
a.restaurant_name,
AVG(price) AS price,
AVG(age) AS age
FROM food_orders a
INNER JOIN customers b ON a.customer_id = b.customer_id
GROUP BY 1
) c
ORDER BY 1;
SELECT restaurant_name, a.avg_price, a.avg_age,
CASE WHEN a.avg_price <= 5000 THEN 'price_group_1'
WHEN a.avg_price <= 10000 THEN 'price_group_2'
WHEN a.avg_price <= 30000 THEN 'price_group_3'
ELSE 'price_group_4' END AS price_group
CASE WHEN a.avg_age <= 29 THEN 'age_group_1'
WHEN a.avg_age BETWEEN 30 AND 39 THEN 'age_group_2'
WHEN a.avg_age BETWEEN 40 AND 49 THEN 'age_group_3'
ELSE 'age_group_4' END AS age_group
FROM (
SELECT
f.restaurant_name,
AVG(f.price) AS avg_price,
AVG(c.age) AS avg_age
FROM food_orders f
JOIN customers c ON f.customer_id = c.customer_id
GROUP BY f.restaurant_name
) a;
CASE 구문 사이에 , 쉼표가 빠짐
→ price_group 다음에 , 없이 바로 age_group으로 이어짐 → 문법 에러 발생
AS 키워드 누락 가능성, 식별자 연결 문제 등도 영향 줄 수 있음
다양한 JOIN 연습문제 풀기
서브쿼리를 직접 활용한 예제 쿼리 2~3개 만들어보기