(웹사이트/실무)SQL 오답노트

도로롱·2025년 8월 7일

⭐목적:

해당 섹션은 프로그래머스/리트코드/해커랭커 등 외부 사이트에서 SQL 오답 문제에 대한 오답을 적고, 어느 부분에서 막혔고, 무엇을 배웠는지에 대해 간략하게 기록 하기 위함임.


❤️오답노트 활용 팁

  1. 원인 분석에 집중하세요: 정답 코드를 이해하는 것보다 내가 왜 틀렸는지를 한두 줄이라도 직접 글로 써보는 과정이 가장 중요합니다. '실수했다'에서 그치지 않고 '왜 실수했는지'를 파고들어야 같은 실수를 반복하지 않습니다.

  2. 태그를 적극적으로 활용하세요: #JOIN, #서브쿼리, #날짜함수 와 같이 태그를 꾸준히 달아두면, 나중에 특정 개념이 약하다고 느낄 때 해당 태그가 달린 문제들만 모아서 복습할 수 있습니다.

  3. 주기적으로 다시 풀어보세요: 일주일 뒤, 한 달 뒤에 오답 노트를 보면서 코드를 보지 않고 다시 한번 풀어보세요. 완벽하게 풀 수 있다면 그 개념은 이제 당신의 것이 된 겁니다.

⭐ 오답 노트 TEMPLATE

📆 날짜: 2025-08-07

📌 문제 정보

  • 출처 및 번호: [예: 프로그래머스 SQL 고득점 Kit, Level 3, 문제 이름]
  • 문제 링크: [문제에 바로 갈 수 있는 링크]

📝 문제 요약

  • [예: '입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회']

❌ 나의 오답 코드

-- 여기에 내가 작성했던 틀린 코드를 그대로 붙여넣으세요.
SELECT
    ANIMAL_ID,
    NAME
FROM
    ANIMAL_OUTS O
LEFT JOIN
    ANIMAL_INS I ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE
    O.DATETIME IS NOT NULL
ORDER BY
    O.DATETIME - I.DATETIME DESC;
-- LIMIT 2 를 빠트림

🤔 오답 원인 분석
오류 메시지 또는 실패 원인: [예: '정답이긴 하지만 상위 2개만 출력하라는 조건을 누락함.']

근본적인 실수: [예: '문제를 꼼꼼히 읽지 않고 ORDER BY 까지만 구현한 뒤 제출함. 요구사항을 끝까지 확인하는 습관이 필요.']

헷갈렸던 개념: [예: '보호 기간을 계산하기 위해 DATEDIFF를 써야 할지, 단순 뺄셈을 해야 할지 순간적으로 헷갈렸음.']
  • 정답 테이블

  • 내 쿼리 테이블

✅ 정답 코드 및 핵심 로직

SELECT
    O.ANIMAL_ID,
    O.NAME
FROM
    ANIMAL_OUTS O
LEFT JOIN
    ANIMAL_INS I ON O.ANIMAL_ID = I.ANIMAL_ID
ORDER BY
    DATEDIFF(O.DATETIME, I.DATETIME) DESC
LIMIT 2;
  • 핵심 로직: DATEDIFF()로 보호 기간(일수)을 계산하고, ORDER BY ... DESC로 내림차순 정렬한 뒤, LIMIT 2로 상위 2개만 잘라내는 것이 핵심.

📚 핵심 개념 및 배운 점

  • 주요 함수/문법: DATEDIFF(), LIMIT

  • 배운 점:
    ㄴMySQL에서 날짜 간의 차이를 '일' 단위로 명확하게 계산하려면 ㄴDATEDIFF(끝나는 날짜, 시작 날짜)를 사용하는 것이 더 안전하고 명시적이다.
    ㄴ '상위 N개', '가장 ~한 N개' 등의 요구사항이 나오면 LIMIT 키워드를 빠트리지 않았는지 반드시 확인해야 한다.


profile
질문 없는 성장은 없다. 3년차 데이터 분석가

0개의 댓글