4-5. 3번 문제 질

안녕하세요, 카일스쿨님 강의 너무 잘 듣고 있습니다.
trainer_id 별로 결과값을 보고싶은데 오류가 해결되질 않아서 질문 남깁니다. 서브쿼리로 작성했기 때문에 trainer_id 별로 확인할 수가 없는 걸까요?
Answer 2
0
설아님 안녕하세요. 현재 쿼리를 살펴보면,
SELECT # A
trainer_id,
FORMAT_DATE ('%d/%m/%Y', MIN_date) AS form
FROM (
SELECT # B
MIN(catch_date) AS MIN_date
FROM(
SELECT # C
trainer_id,
catch_date
FROM 'basic.trainer_pokemon"
ORDER BY trainer_id, catch_date ASC)
GROUP BY
trainer_id
)
GROUP BY trainer_id
이런 형태고, SELECT에 제가 A, B, C 라고 작성했어요.
쿼리문에서는 아래에 있는 쿼리(안쪽에 있는 쿼리)에 있는 컬럼을 바깥쪽 쿼리에서 사용할 수 있어요. 즉, C에 있는 SELECT문에 있는 컬럼을 B에서 사용할 수 있고, B SELECT문에 있는 컬럼을 A에서 사용할 수 있습니다.
지금 쿼리는 서브쿼리를 쓴 것이 문제가 아니고, B에서 MIN(catch_date)만 하셔서 trainer_id 컬럼이 없어서 그래요. 근데 그 쿼리문 보면 GROUP BY엔 trainer_id가 있네요. 아마 집계할 때 GROUP BY를 쓴다는 것은 잘 이해하신 것 같은데, SELECT에도 집계 컬럼을 놓치신 것 같아요.
SELECT
trainer_id,
MIN(catch_date) AS MIN_date
FROM Table
GROUP BY
trainer_id
이렇게 쓰면 안쪽의 SELECT에 trainer_id가 있어서 사용할 수 있습니다.
에러 메세지가 Unrecognized name: trainer_id at [13:3]인데 이 에러를 해석하면 trainer_id라는 이름을 인식하지 못했다는 것을 의미합니다. 인식하지 못했으면 SELECT에 있나 확인해보면 됩니다.
정리하면
에러 메세지 읽어보기. 인지를 못한다면 SELECT를 안하고 있을 것
GROUP BY를 할 때 GROUP BY 뒤에 나오는 집계 기준을 SELECT에도 써줘야 함
안쪽에 있는 쿼리문에 있는 컬럼만 바깥에 있는 쿼리에서 사용할 수 있음
이 부분을 이해하시면 더 좋을 것 같아요. 강의하면 이 부분을 자주 물어보는 내용이에요.
추가로 ORDER BY는 쿼리의 안쪽보다 바깥쪽(마지막)에 쓰는 것이 더 좋습니다. 안쪽에서 ORDER BY를 해서 정렬해도 바깥에서 정렬이 깨질 수 있거든요. 정렬이란 것은 모든 값을 다 확인해야 하기 때문에 연산 부하가 있는 편입니다. ORDER BY를 지금 안쪽에 쓸 이유가 없으니 바깥에서 쓰시면 됩니다!
0
안녕하세요, 인프런 AI 인턴입니다. 이설아님, 강의를 잘 수강하고 계시다니 감사합니다! 질문하신 SQL 쿼리 오류에 대해 도움을 드리겠습니다.
질문의 쿼리 분석에 따르면, trainer_id를 그룹화하고 최소 날짜 catch_date를 불러오며, 이 최소 날짜를 특정 형식으로 포맷하려는 목적입니다. 그러나 현재 오류 메시지는 서브쿼리나 이전 섹션에서 전혀 trainer_id를 제대로 참조하지 않기 때문에 발생할 수 있습니다.
아래 코드를 예시로 제시하여 문제 해결을 돕겠습니다.
SELECT
trainer_id,
FORMAT_DATE("%d/%m/%Y", MIN(DATE(catch_datetime))) as first_date
FROM
basic.trainer_pokemon
GROUP BY
trainer_id
ORDER BY
trainer_id;
큰 문제 없이 실행된다면, trainer_id를 그룹화하고 각 트레이너의 최소 포획 날짜를 형식화하여 볼 수 있습니다. 만약 서브쿼리를 사용한 복잡성이 필요하다면, 반드시 외부 쿼리의 SELECT문과 서브쿼리에서 trainer_id가 동일하게 참조되어야 합니다.
만약 여전히 같은 오류가 발생한다면, 쿼리의 특정 부분을 점검하는 것이 좋습니다:
- trainer_id가 서브쿼리 및 메인 쿼리에서 모두 참조되는지 확인.
- 데이터셋의 컬럼명이 정확히 일치하는지 점검.
유사한 문제 해결 예시를 찾으신다면, 아래의 기존 응답リンク을 확인하실 수 있습니다:
- 4-5 시간 데이터 연습 문제 3번 질문 - 카일스쿨: 서브쿼리에 대한 설명과 사용 사례를 이해하는 데 도움이 될 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
vs code
0
48
2
수업자료 다운
0
46
2
쿼리 화면 문의
0
70
2
JOIN 1번 문제
1
73
2
battle 테이블 생성 시 생성 오류
0
67
1
5-6. 4번 문제 WHERE 조건의 위치 문의
0
64
2
5-6. 연습문제 4번, type2에 대해서는 고려하지 않아도 될까요?
1
68
2
battle table 오류
0
68
2
location IS NOT NULL 을 굳이 안 써도 되지 않나요?
0
61
2
12강 집계 함수
0
48
1
2-6. 연습 문제 1~3번
0
49
1
안녕하세요! 11번 문제 query문에 관해 질문드립니다
0
49
1
2-6 #2 WHERE vs. HAVING절 사용 여부 차이
0
65
1
섹션 별 퀴즈
0
64
1
espanso 설치 완료 후 프로그램 실행 문제
0
102
2
Syntax에러
0
80
2
4-5. 1번 문제 TIMESTAMP 관련 질문
0
86
2
시각화 도구 사용
0
109
2
11번 문제 GROUP BY 사용하는 이유
0
98
1
big query 쿼리 결과 컬럼 폭
0
107
3
battle 스키마 조건 복사 파일이 열리지 않아요.
0
127
1
6-5 데이터 검증 결과 예시문제
0
78
2
battle 스키마 조건 복사붙여넣기용 자료
0
113
2
17번 문제 질문드립니다.
0
173
3

