2. 평균은 AVG()를 사용한다.
평균은 직접 계산할 수도 있다.
SUM(...) / COUNT(...)
하지만 SQL에는 평균을 계산하는 함수가 이미 존재한다.
AVG(...)
가독성도 좋고 실수도 줄일 수 있다.
SQL 실행 순서
FROM
→ WHERE
→ GROUP BY
→ HAVING
→ SELECT
→ ORDER BY
따라서
- 일반 행 조건 → WHERE
- 집계 결과 조건 → HAVING
으로 구분한다.
HAVING AVG(...) >= 7
3. 날짜 차이는 DATEDIFF()
DATE_FORMAT()은 날짜를 문자열 형태로 출력하는 함수이다.
DATE_FORMAT(CREATED_DATE,'%Y-%m-%d')
날짜 계산을 하는 함수가 아니다.
날짜 차이를 계산할 때는
DATEDIFF(END_DATE, START_DATE)
를 사용한다.
시작일과 종료일을 모두 포함하는 문제라면
DATEDIFF(END_DATE, START_DATE) + 1
을 사용한다.
4. 소수점 처리 함수
문제에서 요구하는 출력 형식에 따라 함수가 달라진다.
반올림
ROUND(값, 자리수)
버림
FLOOR(값)
올림
CEIL(값)
예를 들어
ROUND(AVG(...),1)
은 평균을 소수 첫째 자리까지 반올림하여 출력한다.
5. LEFT JOIN의 목적
오늘 가장 이해가 된 부분.
LEFT JOIN은 연결되지 않는 데이터를 찾기 위해 사용한다.
LEFT JOIN
을 사용하면 왼쪽 테이블의 데이터는 모두 유지된다.
연결되는 데이터가 없으면 오른쪽 컬럼은
NULL
이 된다.
그래서
WHERE T.ITEM_ID IS NULL
을 이용하면
연결되는 데이터가 없는 행
을 쉽게 찾을 수 있다.
대표 유형
- 업그레이드할 수 없는 아이템
- 없는 기록 찾기
6. 같은 테이블도 여러 번 조인할 수 있다.
처음에는 테이블 하나는 한 번만 사용하는 줄 알았다.
하지만
부모 아이템
과
자식 아이템
처럼 역할이 다르면 같은 테이블을 여러 번 사용할 수 있다.
ITEM_INFO AS PARENT
ITEM_INFO AS CHILD
즉,
조인의 개수는 테이블 개수가 아니라 필요한 역할의 개수이다.
7. JOIN 문제를 풀 때 가장 먼저 생각할 것
SQL부터 작성하지 않는다.
먼저 아래 세 가지를 적는다.
① 출력할 정보는 어느 테이블에 있는가?
② 조건을 확인할 정보는 어느 테이블에 있는가?
③ 두 테이블은 어떤 컬럼으로 연결되는가?
이 과정을 거치면 JOIN 방향을 훨씬 쉽게 찾을 수 있다.
8. SQL는 실행 순서를 생각해야 한다.
오늘 가장 크게 바뀐 사고 방식.
예전에는 SQL을 위에서 아래로 읽었다.
하지만 실제로는
FROM
→ JOIN
→ WHERE
→ GROUP BY
→ HAVING
→ SELECT
→ ORDER BY
순서대로 실행된다.
앞으로는 쿼리를 보면
"지금 이 단계에서 테이블이 어떤 모습일까?"
를 계속 떠올리며 문제를 풀어야 한다.
9. CASE WHEN
조건에 따라 출력 값을 변경하는 문법.
CASE
WHEN STATUS = 'SALE' THEN '판매중'
WHEN STATUS = 'RESERVED' THEN '예약중'
WHEN STATUS = 'DONE' THEN '거래완료'
END AS STATUS
주로
- 코드값 → 사람이 읽는 문자열
- 조건별 등급 분류
- 그룹핑 기준 생성
에 사용된다.
'프로그래밍 > 코딩 테스트, 더 이상 미룰 수 없다' 카테고리의 다른 글
| [코딩 테스트, 더 이상 미룰 수 없다] 프로그래머스 lv1 키패드 누르기 - B/DFS와 좌표 계산 분리해서 유형좁히기 (0) | 2026.06.27 |
|---|---|
| [코딩 테스트, 더 이상 미룰 수 없다] 프로그래머스lv1.신규 아이디 추천 -Python 문자열 정복하기 (0) | 2026.06.27 |
| [코딩 테스트, 더 이상 미룰 수 없다] 프로그래머스lv1 - 달리기 경주(Python으로 양방향 매핑 문제) (0) | 2026.06.27 |
| [코딩 테스트, 더 이상 미룰 수 없다] 프로그래머스 Lv1 - 신고 결과 받기 (0) | 2026.06.26 |
| [코테대비] 프로그래머스 Lv1 - 개인정보 수집 유효기간 (첫 풀이) (0) | 2026.06.26 |