Programing Language/SQL
DAYOFWEEK 함수
Data-SSung
2025. 6. 14. 11:11
반응형
기본 문법
sql
DAYOFWEEK(date)
반환값
1 = 일요일 (Sunday)
2 = 월요일 (Monday)
3 = 화요일 (Tuesday)
4 = 수요일 (Wednesday)
5 = 목요일 (Thursday)
6 = 금요일 (Friday)
7 = 토요일 (Saturday)
🔍 기본 사용 예시
sql
-- 오늘이 무슨 요일인지
SELECT DAYOFWEEK(CURDATE()); -- 오늘이 토요일이면 7 반환
-- 특정 날짜의 요일
SELECT DAYOFWEEK('2025-06-14'); -- 7 (토요일)
-- 주문 데이터의 요일 확인
SELECT order_id, order_date, DAYOFWEEK(order_date) as day_num
FROM orders;
🎯 실무 활용 예시
1. 요일별 매출 분석
sql
SELECT
CASE DAYOFWEEK(order_date)
WHEN 1 THEN '일요일'
WHEN 2 THEN '월요일'
WHEN 3 THEN '화요일'
WHEN 4 THEN '수요일'
WHEN 5 THEN '목요일'
WHEN 6 THEN '금요일'
WHEN 7 THEN '토요일'
END AS weekday,
COUNT(*) AS order_count,
SUM(amount) AS total_sales
FROM orders
GROUP BY DAYOFWEEK(order_date)
ORDER BY DAYOFWEEK(order_date);
2. 주말/평일 구분
sql
-- 주말 주문만 조회
SELECT *
FROM orders
WHERE DAYOFWEEK(order_date) IN (1, 7); -- 일요일, 토요일
-- 평일 주문만 조회
SELECT *
FROM orders
WHERE DAYOFWEEK(order_date) BETWEEN 2 AND 6; -- 월~금
-- 주말/평일 구분하여 집계
SELECT
CASE
WHEN DAYOFWEEK(order_date) IN (1, 7) THEN '주말'
ELSE '평일'
END AS day_type,
COUNT(*) AS order_count,
AVG(amount) AS avg_amount
FROM orders
GROUP BY
CASE
WHEN DAYOFWEEK(order_date) IN (1, 7) THEN '주말'
ELSE '평일'
END;
3. 요일별 고객 행동 분석
sql
-- 월요일에 가장 많이 주문하는 고객들
SELECT customer_id, COUNT(*) as monday_orders
FROM orders
WHERE DAYOFWEEK(order_date) = 2 -- 월요일
GROUP BY customer_id
HAVING COUNT(*) >= 5
ORDER BY monday_orders DESC;
🔄 다른 요일 함수와 비교
WEEKDAY vs DAYOFWEEK
sql
-- WEEKDAY: 0=월요일, 1=화요일, ..., 6=일요일
SELECT WEEKDAY('2025-06-14'); -- 5 (토요일)
-- DAYOFWEEK: 1=일요일, 2=월요일, ..., 7=토요일
SELECT DAYOFWEEK('2025-06-14'); -- 7 (토요일)
-- 변환 공식
SELECT
DAYOFWEEK('2025-06-14') as dayofweek_result, -- 7
WEEKDAY('2025-06-14') as weekday_result, -- 5
((DAYOFWEEK('2025-06-14') + 5) % 7) as converted; -- DAYOFWEEK를 WEEKDAY로 변환
DAYNAME 함수
sql
-- 요일 이름 직접 반환 (영어)
SELECT DAYNAME('2025-06-14'); -- 'Saturday'
-- 한국어로 변환
SELECT
CASE DAYNAME('2025-06-14')
WHEN 'Sunday' THEN '일요일'
WHEN 'Monday' THEN '월요일'
WHEN 'Tuesday' THEN '화요일'
WHEN 'Wednesday' THEN '수요일'
WHEN 'Thursday' THEN '목요일'
WHEN 'Friday' THEN '금요일'
WHEN 'Saturday' THEN '토요일'
END AS korean_dayname;
🎯 코딩테스트 출제 패턴
1. 요일별 주문 통계
sql
-- "각 요일별 평균 주문 금액을 구하시오"
SELECT
DAYOFWEEK(order_date) as day_num,
CASE DAYOFWEEK(order_date)
WHEN 1 THEN '일요일'
WHEN 2 THEN '월요일'
WHEN 3 THEN '화요일'
WHEN 4 THEN '수요일'
WHEN 5 THEN '목요일'
WHEN 6 THEN '금요일'
WHEN 7 THEN '토요일'
END AS weekday,
ROUND(AVG(amount), 2) as avg_amount
FROM orders
GROUP BY DAYOFWEEK(order_date)
ORDER BY day_num;
2. 특정 요일 필터링
sql
-- "월요일에 주문한 고객 목록"
SELECT DISTINCT customer_id, customer_name
FROM orders o
JOIN customers c ON o.customer_id = c.id
WHERE DAYOFWEEK(o.order_date) = 2;
3. 주말 vs 평일 비교
sql
-- "주말과 평일의 평균 주문량 비교"
SELECT
CASE
WHEN DAYOFWEEK(order_date) IN (1, 7) THEN '주말'
ELSE '평일'
END AS period_type,
COUNT(*) as total_orders,
AVG(amount) as avg_order_amount,
SUM(amount) as total_revenue
FROM orders
GROUP BY
CASE
WHEN DAYOFWEEK(order_date) IN (1, 7) THEN '주말'
ELSE '평일'
END;
💡 성능 최적화 팁
❌ 비효율적인 사용
sql
-- 인덱스를 탈 수 없음
WHERE DAYOFWEEK(order_date) = 2
✅ 효율적인 사용 (특정 날짜 범위가 있을 때)
sql
-- 먼저 날짜 범위로 필터링 후 요일 확인
WHERE order_date >= '2025-06-01'
AND order_date < '2025-07-01'
AND DAYOFWEEK(order_date) = 2
🔍 실제 활용 시나리오
배송 스케줄링
sql
-- 월요일 배송 불가 상품들
SELECT product_id, order_date
FROM orders
WHERE DAYOFWEEK(expected_delivery_date) = 2 -- 월요일
AND shipping_type = 'special';
고객 행동 패턴 분석
sql
-- 요일별 접속자 수 (웹 로그 분석)
SELECT
DAYOFWEEK(access_date) as day_num,
COUNT(DISTINCT user_id) as unique_visitors,
COUNT(*) as page_views
FROM web_logs
WHERE access_date >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
GROUP BY DAYOFWEEK(access_date)
ORDER BY day_num;
핵심 요약: DAYOFWEEK는 요일별 데이터 분석에 필수적인 함수로, 특히 비즈니스 패턴 분석에서 자주 활용됩니다! 🎯
반응형