1. SQL 쿼리 작성 흐름
'쿼리 작성' 부분은 반복해서 하다보면 실력 늘기 마련이지만, 그 앞뒤의 과정들이 매우 중요함!
- 지표 고민 & 문제 정의 : 어떤 문제를 해결하기 위해 데이터가 필요한 걸까?
- 지표 구체화 : 추상적이지 않고 구체적인 지표 명시 (분자/분모 표시, 이름 구체적으로 작성)
- 생각없이 바로 쿼리 짜다가 '아 지표 정의 잘못했네'하면 다시 해야 함
- 어떤 컬럼은 어떤 value만 써야 한다 등
- 지표 탐색 : 유사한 문제를 해결한 케이스가 있는지 확인
- 있으면 해당 쿼리 리뷰 (있는 쿼리 재활용)
- 없으면 구글링해서 어떤 지표 쓰는 게 좋을지 참고 & 직접 쿼리 작성
- 쿼리 작성 : 데이터가 있는 테이블 찾기, ERD 문서 등 참고
- 테이블이 2개 이상인 경우, 연결(JOIN) 방법을 고민해야 함
- 데이터 정합성 확인 : 쿼리 실행 결과가 예상한 결과와 동일한지 확인
- 쿼리 가독성 확인 : 나중을 위해 깔끔하게 쿼리 작성
- 쿼리 저장 : 쿼리는 재사용되므로 문서로 저장
2. 쿼리 작성 템플릿
1) 글로 아래 내용들을 미리 적어보면 쿼리 작성하기가 더 수월함! 👉 클립보드에 저장해두고 쿼리 쓸 때마다 활용!
- 강의에서는 '데이터의 기간'을 쓰는 경우가 없지만, 실제 회사에서는 체크해야하는 경우가 많음
ex) 처음엔 1~2일 범위로 설정해서 쿼리 짠 뒤에, 실제 필요한 기간(ex. 7일)으로 확장해서 출력!
# 쿼리 작성하는 목표, 확인할 지표 :
# 쿼리 계산 방법 :
# 데이터의 기간 :
# 사용할 테이블 :
# JOIN KEY :
# 데이터의 특징 :
SELECT
FROM
WHERE
2) 템플릿을 좀 더 쉽게 사용하기 위해 Espanso라는 생산성 도구를 함께 활용하자!
- 트리거(특정 단어)가 감지되면 미리 정의해둔 텍스트로 자동완성해주는 프로그램 (=휴대폰에 있는 '대체 텍스트' 기능)
- ex) Today is `:date` 입력하면 ➔ Today is `October 11, 2021` 자동 변환됨!
- 터미널(명령 프롬프트, PowerShell)에서 "espanso edit"을 입력하면 바로 수정파일(base.yml)로 접근 가능 ➔ 아래와 같이 원하는 trigger & replacement 입력해주면 됨!
3. 오류 디버깅 방법
- SQL 쿼리 작성하다보면 실행 안되는 경우를 경험하게 될 거임
- 오류 메시지가 알려주고자 하는 것
- 현재 작성한 방식으로는 답을 얻을 수 없어요 (길잡이 역할)
- 이 부분에서 문제가 발생했어요 (문제 진단)
- ➔ 오류 메시지를 보면서 더 좋은 길을 찾아나가자! (긍정 마인드^^)
- 대표적인 오류 카테고리 = Syntax Error (문법 오류)
- Error Message를 보고 번역 또는 해석한 후, 해결 방법 찾아보기
- 구글에 검색 / ChatGPT에 질문 / 지인에게 질문(커뮤니티 등)
Syntax Error: SELECT list must not be empty at [10:1]
- 번역: SELECT 목록은 [10:1]에서 비어 있으면 안 됩니다.
- 해석: SELECT문에 컬럼 지정 안 하고 비워둬서 그렇구나!
Number of arguments does not match for aggregate function COUNT
- 번역: 집계 함수 COUNT의 인자 수가 일치하지 않습니다.
- 해석: `COUNT`에는 컬럼 1개밖에 못 넣는데 2개 넣어서 그렇구나!
SELECT
COUNT(id, kor_name) --❎COUNT에 컬럼을 2개 넣음
FROM basic.pokemon
SELECT list expression references column type1 which is neither grouped nor aggregated
- 번역: SELECT 목록 식은 다음에서 '그룹화되거나 집계되지' 않은 열을 참조합니다.
- 해석: 집계함수를 쓰는데 GROUP BY에 컬럼을 명시하지 않아서 그렇구나!
SELECT
type1,
COUNT(id) AS cnt --❎어떤 컬럼을 기준으로 id 개수를 셀 것인지 알 수 없음
FROM basic.pokemon
-- GROUP BY가 없기 때문에
Syntax error: Expected end of input but got keyword SELECT
- 번역: 입력이 끝날 것으로 예상되었지만 SELECT 키워드가 입력되었습니다.
- 해석: SELECT문 여러 개 넣었는데 `;` 구분자를 넣지 않았구나! (혹은 실행할 부분만 스크랩해서 실행해도 해결 가능)
SELECT
type1,
COUNT(id) AS cnt
FROM basic.pokemon
GROUP BY
type1
--❎SELECT문 여러 개 쓸 거면 ;로 구분해줘야 함
SELECT
*
FROM basic.trainer
Syntax error: Expected end of input but got keyword WHERE at [5:1]
- 번역: 입력이 끝날 것으로 예상되었지만 [5:1]에서 키워드 WHERE를 얻었습니다.
- 해석: LIMIT은 맨 아래 써야하는데 FROM절에 붙어있어서 그렇구나!
(=BigQuery에서 '새 탭' 열 때 자동 입력된 것 때문에 자주 발생하는 실수)
SELECT
*
FROM basic.trainer LIMIT 10 --❎LIMIT은 마지막에 써야 함
WHERE
id = 3
Syntax error: Expected ")" but got end of script at [8:11]
- 번역: ")"가 예상되지만 [8:11]에 스크립트가 끝났습니다.
- 해석: 마지막에 괄호를 닫지 않아서 그렇구나!
SELECT
name,
FROM ( --❎여는 괄호는 있는데 닫는 괄호가 없음
SELECT
*
FROM basic.trainer
WHERE
id = 3
🙏References
'SQL > BigQuery' 카테고리의 다른 글
[SQL] 8. 다양한 데이터 타입 (날짜 및 시간) (0) | 2025.02.13 |
---|---|
[SQL] 7. 다양한 데이터 타입 (CAST, 문자열) (1) | 2025.02.12 |
[SQL] 5. 연습문제 풀이 (0) | 2025.02.09 |
[SQL] 4. 데이터 집계 (COUNT, DISTINCT, GROUPBY) (2) | 2025.02.08 |
[SQL] 3. 데이터 탐색 (SELECT, FROM, WHERE) (0) | 2025.02.06 |