프로그래밍/코딩 테스트, 더 이상 미룰 수 없다

[코딩 테스트, 더 이상 미룰 수 없다] SQL[1]

d 0_0 b 2026. 6. 27. 00:51

 

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

주로

  • 코드값 → 사람이 읽는 문자열
  • 조건별 등급 분류
  • 그룹핑 기준 생성

에 사용된다.