-
DAYOFWEEK 함수Programing Language/SQL 2025. 6. 14. 11:11반응형
기본 문법
sqlDAYOFWEEK(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. 요일별 매출 분석
sqlSELECT 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는 요일별 데이터 분석에 필수적인 함수로, 특히 비즈니스 패턴 분석에서 자주 활용됩니다! 🎯
반응형'Programing Language > SQL' 카테고리의 다른 글
PERCENTILE vs NTILE 완벽 비교 가이드 (0) 2025.06.14 프로그래머스_대장균의 크기에 따라 분류하기 2 (0) 2025.06.14 CTE(Common Table Expression) 완벽 이해 가이드 (1) 2025.06.13 프로그래머스_멸종위기의 대장균 찾기 (0) 2025.06.13 MySQL DATETIME 성능 최적화 완벽 가이드 (0) 2025.06.13