원인 분석에 집중하세요: 정답 코드를 이해하는 것보다 내가 왜 틀렸는지를 한두 줄이라도 직접 글로 써보는 과정이 가장 중요합니다. '실수했다'에서 그치지 않고 '왜 실수했는지'를 파고들어야 같은 실수를 반복하지 않습니다.
태그를 적극적으로 활용하세요: #JOIN, #서브쿼리, #날짜함수 와 같이 태그를 꾸준히 달아두면, 나중에 특정 개념이 약하다고 느낄 때 해당 태그가 달린 문제들만 모아서 복습할 수 있습니다.
주기적으로 다시 풀어보세요: 일주일 뒤, 한 달 뒤에 오답 노트를 보면서 코드를 보지 않고 다시 한번 풀어보세요. 완벽하게 풀 수 있다면 그 개념은 이제 당신의 것이 된 겁니다.
-- 여기에 내가 작성했던 틀린 코드를 그대로 붙여넣으세요.
select
name
from (
select
e2.name as name,
count(*)
from
employee e1
join employee e2 on e1.id = e2.managerid
group by
1
having
count(*) >=5
) as result
🤔 오답 원인 분석
오류 메시지 또는 실패 원인: ['문법적 오류는 없으나 join 조건을 완전 반대로 적음']
근본적인 실수: [예: '
① 문제를 제대로 이해하지 않았고, 아는 문제라고 쉽다고 생각 함.
② 테이블 alias를 더 명확하게 만들었어야 함
(ex. e1, e2 라고 쓸 시 어떤 것이 직원테이블인지, 매니저 테이블인지 모름 → e,m으로 변경)
③ 조인 조건을 꼼꼼히 생각해 보는 습관 기르기']
헷갈렸던 개념: [예:'없음' ]
SELECT
m.name -- 3. 조건을 만족하는 매니저의 이름을 조회합니다.
FROM
Employee e -- 1. e는 직원(employee) 테이블입니다.
JOIN
Employee m ON e.managerId = m.id -- 2. 직원의 managerId와 매니저의 id를 연결합니다. m은 매니저(manager) 테이블입니다.
GROUP BY
m.id -- 매니저 ID를 기준으로 그룹을 만듭니다. (이름이 같을 수 있으니 id로 하는 것이 더 안전합니다)
HAVING
COUNT(e.id) >= 5; -- 각 매니저 그룹에 속한 직원 수가 5명 이상인 경우만 필터링합니다.
주요 함수/문법: -
배운 점:
ㄴ TEST 시 긴장 하므로, 이해가 더 안될 확률이 엄청 크다. 테이블로 헷갈리지 않도록 직관적인 별칭을 써야한다.
ㄴ GROUP BY는 꼭 SELECT절에 primary key가 포함된 경우라면, primary key 하나만 써도 무방하며, select 절에 미포함 되도 primary key로 그룹핑 할 수 있다 (유일성)
*GROUP BY에 쓸 수 있는 컬럼 정리
ㄴ원칙: SELECT 절의 모든 일반 컬럼은 GROUP BY 절에 포함되어야 한다.
ㄴ예외 (스마트한 데이터베이스): 하지만 최신 데이터베이스들은 GROUP BY에 기본 키(Primary Key)가 포함되면, 그 기본 키에 함수적으로 종속되는 다른 컬럼들은 이미 그룹화된 것으로 간주하여 SELECT 절에 자유롭게 사용할 수 있도록 허용
*예시

sales_teams

sales_records

예시1: 보통의 경우 (select절에 쓰인 모든 컬럼 집계 함수 제외 똑같이 쓰기)

예시2: 예외적인 경우

- primary key가 아닌 다른 컬럼들은 기본 키에 함수적으로 종속되어 있다 판단하여, group by절에서 생략 가능
8/ 18 재풀이 예정