[SQL] 6. SQL 쿼리 작성 팁, 오류 디버깅

2025. 2. 11. 10:51·SQL/BigQuery

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

  • 카일스쿨 님의 인프런 강의 (https://www.inflearn.com/course/%EC%B4%88%EB%B3%B4%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-%EB%B9%85%EC%BF%BC%EB%A6%AC-sql-%EC%9E%85%EB%AC%B8/dashboard) 를 듣고 정리한 내용입니다.

'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
'SQL/BigQuery' 카테고리의 다른 글
  • [SQL] 8. 다양한 데이터 타입 (날짜 및 시간)
  • [SQL] 7. 다양한 데이터 타입 (CAST, 문자열)
  • [SQL] 5. 연습문제 풀이
  • [SQL] 4. 데이터 집계 (COUNT, DISTINCT, GROUPBY)
simon919
simon919
개인적으로 공부한 내용을 기록하고 나누는 블로그입니다. 데이터 분석, 인공지능에 관한 내용을 주로 다룹니다.
  • simon919
    문과생의 AI 생존기
    simon919
  • 전체
    오늘
    어제
    • 분류 전체보기 (84)
      • ML & DL (38)
        • 머신러닝 기초 (23)
        • 딥러닝 기초 (6)
        • 데이터마이닝 (9)
      • Data structure & Algorithm (1)
      • SQL (21)
        • BigQuery (13)
        • MySQL (8)
      • Statistics (4)
        • 교육 연구를 위한 통계 (4)
        • Linear Algebra (0)
      • Python (17)
        • Pandas (16)
        • Matplotlib (0)
        • Numpy (0)
        • Web Crawling (1)
      • Projects (0)
      • Etc. (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 글자가 깨지면 새로고침 해주세요 :)
  • 인기 글

  • 태그

    데이터마이닝
    해커랭크
    Functional API
    pandas
    최우수혼공족
    kmeans
    Bayesian Optimization
    리트코드
    혼공머신
    Xai
    mysql
    Conv2d
    SQL
    kmooc
    HELLO 스킨
    agglomerative
    통계학 기초
    혼공학습단
    SQL코딩테스트
    BigQuery
    ml기초
    MaxPooling2D
    google cloud
    특성맵 시각화
    블로그 스킨
    교육통계
    pytorch
    SQL문제풀이
    silhouette index
    티스토리 스킨
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
simon919
[SQL] 6. SQL 쿼리 작성 팁, 오류 디버깅
상단으로

티스토리툴바