What I Do

구글 시트 QUERY 함수 기초 | 시트를 데이터베이스처럼 쓰는 법

16분 읽기

구글 시트 QUERY 함수는 select·where·group by 같은 쿼리 문장 한 줄로 원하는 열과 행만 뽑고 집계까지 해 주는 함수입니다. 문법과 인수, 절 순서, 광고 리포트 예시 수식, 자주 나는 오류를 Google 공식 도움말 기준으로 정리했습니다.

구글 시트 QUERY 함수 기초 | 시트를 데이터베이스처럼 쓰는 법

구글 시트 QUERY 함수는 =QUERY(데이터, 쿼리, 헤더) 형식으로, 따옴표 안에 쓴 쿼리 문장 한 줄로 필요한 열과 행만 골라내고 합계·평균까지 계산해 주는 함수입니다. 쿼리 문장은 Google Visualization API 쿼리 언어로 쓰는데, select·where·group by·order by 같은 단어가 SQL과 비슷해서 시트를 작은 데이터베이스처럼 다룰 수 있는데요. 필터, 정렬, 피벗을 따로 거치지 않고 수식 하나로 요약표를 만들 수 있어서 매주 반복되는 리포트 정리에 잘 맞습니다.

매주 쌓이는 광고 리포트 시트에서 "네이버 캠페인만, 비용 순으로, 상위 다섯 개만 보고 싶은데" 하고 필터를 몇 번씩 걸었다 풀었다 해 보신 적 있으신가요? 원본을 건드리지 않고 다른 탭에 늘 같은 기준의 요약표를 띄워 두고 싶을 때 QUERY 함수가 잘 맞습니다. 이번 글에서는 Google 공식 도움말의 QUERY 함수 설명과 쿼리 언어 레퍼런스를 기준으로 기초 문법부터 실무 예시까지 정리해 보겠습니다.

구글 시트 QUERY 함수는 어떤 함수일까요?

도움말은 QUERY 함수를 데이터에서 Google Visualization API 쿼리 언어로 검색을 실행하는 함수라고 설명합니다. 인수는 세 개뿐인데요, 마지막 헤더는 생략할 수 있습니다.

인수뜻메모
데이터쿼리를 수행할 셀 범위열마다 부울 값, 숫자(날짜·시간 포함), 문자열 중 한 가지 유형만 담겨야 합니다
쿼리수행할 쿼리 문장따옴표로 묶거나, 쿼리 문장이 들어 있는 셀을 참조합니다
헤더데이터 맨 위 헤더 행의 개수생략하거나 -1이면 데이터 내용을 보고 추정합니다

비유하자면 QUERY 함수는 도서관 사서에게 건네는 신청 쪽지와 비슷합니다. 서가(데이터)는 그대로 두고 "이 칸의 책 중에서, 이런 조건에 맞는 것만, 이 순서로 가져다 주세요"라고 적어 내면 사서가 골라서 책상 위에 올려 주는 것이죠. 쪽지는 수식으로 한 번 적어 두면 셀에 그대로 남아 있으니, 매번 필터를 걸었다 풀 필요가 없는 것이죠.

구글 시트 QUERY 함수를 서가(데이터)·신청 쪽지(쿼리)·책상(결과)에 빗댄 그림 서가는 그대로 두고, 쪽지에 적은 조건대로 골라 온 것만 책상에 놓입니다 그렇다면 이 쪽지는 어떤 문법으로 써야 할까요?

1. 쿼리 문장은 어떤 순서로 쓰나요?

쿼리 언어 레퍼런스는 절(clause)의 순서를 정해 두었습니다. select, where, group by, pivot, order by, limit, offset, label, format, options 순서이고, 쿼리를 쓸 때는 이 순서를 지켜야 합니다. 모든 절을 다 쓸 필요는 없고 필요한 것만 골라 쓰면 되는데요, 실무에서 자주 쓰는 절은 이렇습니다.

  • select: 가져올 열을 고릅니다. 생략하거나 select *로 쓰면 모든 열을 원래 순서대로 가져옵니다.
  • where: 조건에 맞는 행만 남깁니다.
  • group by: 같은 값끼리 묶어 sum()·avg()·count()·max()·min()으로 집계합니다.
  • order by: 지정한 열 값으로 행을 정렬하고, 뒤에 desc를 붙이면 내림차순입니다.
  • limit: 돌려받을 행 수를 제한합니다.
  • label: 결과 열의 머리글 이름을 바꿉니다.

QUERY 쿼리 문장의 절 순서 select, where, group by, pivot, order by, limit, offset, label, format, options 노란 칸이 실무에서 자주 쓰는 절입니다. 필요한 절만 골라 쓰되 순서는 그대로 지킵니다

구글 시트에서는 열을 A, B, C 같은 열 문자로 가리킨다는 점도 기억해 두세요. select, where 같은 키워드는 대소문자를 가리지 않지만, 열 문자와 문자열 값은 대소문자를 구분한다고 레퍼런스에 적혀 있습니다. 문자열 값은 작은따옴표나 큰따옴표로 감싸면 되는데요, QUERY 함수에서는 쿼리 전체를 이미 큰따옴표로 감싸고 있으니 안쪽 값은 '네이버'처럼 작은따옴표로 쓰는 편이 헷갈리지 않습니다.

2. 광고 리포트에서는 어떻게 활용할 수 있을까요?

A열 날짜, B열 캠페인, C열 매체, D열 비용, E열 클릭이 들어 있고 1행이 머리글인 리포트 시트를 예로 들어 보겠습니다. 아래 수식은 모두 원본과 다른 탭의 빈 셀 하나에 넣는다고 가정하고, 범위는 데이터가 들어 있는 만큼 A1:E500처럼 넉넉히 잡았습니다.

특정 매체만 골라 보기

=QUERY(A1:E500, "select B, D, E where C = '네이버'", 1)

캠페인별 비용 합계를 큰 순서로 보기

=QUERY(A1:E500, "select B, sum(D) where B is not null group by B order by sum(D) desc", 1)

여기서 where B is not null은 넉넉히 잡은 범위의 빈 행을 결과에서 빼기 위한 조건입니다. 레퍼런스는 null 비교를 is null·is not null로 하라고 안내합니다.

상위 다섯 개만 남기고 머리글 바꾸기

=QUERY(A1:E500, "select B, sum(D) where B is not null group by B order by sum(D) desc limit 5 label sum(D) '총 비용'", 1)

절 순서대로 order by 다음에 limit, 그다음에 label이 온 것을 보실 수 있는데요, 앞의 순서 규칙을 지킨 결과입니다.

구글 시트 원본 데이터 A1:E500 옆 G1 셀에 QUERY 수식을 넣어 캠페인별 총 비용을 큰 순서로 요약한 예시 시트 예시 그림: 가상 데이터입니다. G1 수식 하나로 캠페인별 비용 합계가 큰 순서로 정리되고, 머리글은 「총 비용」으로 바뀝니다

기간으로 자르기

=QUERY(A1:E500, "select B, sum(D) where A >= date '2026-09-01' group by B", 1)

날짜와 비교할 때는 값 앞에 date 키워드를 붙이고 yyyy-MM-dd 형식의 문자열로 쓰라고 레퍼런스가 안내합니다. 날짜 칸이 날짜가 아니라 글자로 들어 있으면 이 비교가 맞지 않을 수 있으니, 원본 날짜 열의 형식도 함께 확인해 두세요.

매체를 열로 펼쳐 교차표 만들기

=QUERY(A1:E500, "select B, sum(D) where B is not null group by B pivot C", 1)

pivot 절은 한 열의 고유한 값들을 새 열로 바꿔 주는데요, 이 수식이면 캠페인이 행, 매체가 열인 표가 만들어집니다. 엑셀 피벗테이블에서 행·열 영역에 필드를 끌어다 놓는 작업을 수식으로 한 셈이죠.

3. where 절에서는 어떤 조건을 쓸 수 있나요?

비교 연산자는 =, <, >, <=, >=, !=, <>이고, !=와 <>는 둘 다 「같지 않다」입니다. 레퍼런스가 일부러 짚어 두는 부분이 있는데, 같다는 ==가 아니라 = 하나로 쓴다는 점입니다. 여러 조건은 and·or·not으로 잇고 괄호로 우선순위를 정할 수 있습니다.

문자열을 다룰 때는 아래 연산자가 편리합니다.

  • contains: 값 안 어딘가에 들어 있으면 참. where B contains '브랜드'
  • starts with / ends with: 앞이나 뒤가 일치하면 참
  • like: %(0자 이상 아무 문자), _(아무 문자 하나) 와일드카드를 쓰는 패턴 비교
  • matches: 정규 표현식 비교

이 문자열 비교는 대소문자를 구분합니다. 레퍼런스 예시로는 contains 'John'이 'John Adams'는 찾지만 'john adams'는 찾지 못하는데요, 영문 캠페인명이 섞여 있다면 where lower(B) contains 'brand'처럼 lower()로 소문자를 맞춘 뒤 비교하시길 권합니다.

※ 참고 사항: QUERY 함수에서 자주 막히는 곳은 어디일까요?

수식은 맞는 것 같은데 결과가 이상하다면 아래 세 가지를 먼저 확인해 보세요.

  • group by 규칙: group by를 쓰면 select에 적은 열은 모두 group by에 들어 있거나 sum() 같은 집계 함수로 감싸져 있어야 합니다. select B, C, sum(D) group by B처럼 C를 group by에서 빠뜨리면 이 규칙에 어긋나 결과가 나오지 않습니다.
  • 한 열에 숫자와 글자가 섞인 경우: 도움말은 유형이 섞인 열은 가장 많은 데이터 유형을 그 열의 유형으로 보고, 적은 쪽 유형은 null 값으로 처리한다고 설명합니다. 비용 열에 「-」나 「확인 중」 같은 글자가 몇 칸 섞여 있으면 그 칸은 빈 값처럼 빠지는 것이죠.
  • 헤더 개수: 헤더 인수를 생략하면 시트가 데이터 내용을 보고 머리글 행 수를 추정합니다. 머리글이 엉뚱하게 잡히면 1처럼 숫자를 직접 넣어 주세요.

조건이 단순하다면 QUERY 대신 다른 함수가 더 간단할 때도 있습니다. 구글 시트 함수 목록을 보면 FILTER는 조건에 맞는 행만, SORT는 정렬만, UNIQUE는 고유한 행만 돌려주는 함수로 소개되어 있는데요, 조건 하나로 거르기만 할 때는 FILTER로, 거르면서 묶고 집계하고 정렬까지 한 번에 하고 싶을 때는 QUERY로 나눠 쓰면 수식이 훨씬 읽기 쉬워집니다. 중복을 걷어내는 방법은 엑셀 기준이지만 엑셀 중복 값 제거 글도 함께 참고해 주세요.

정리하면, QUERY 함수는 언제 쓰면 좋을까요?

정리하면 구글 시트 QUERY 함수는 원본은 그대로 두고, 같은 기준의 요약표를 계속 띄워 두고 싶을 때 가장 쓸모가 큽니다. select로 열을 고르고, where로 행을 거르고, group by로 묶고, order by와 limit으로 정리하는 순서만 익혀 두면 대부분의 리포트 요약은 수식 한 줄로 끝나는데요. 저도 광고 리포트 탭을 정리하면서 절 순서와 group by 규칙부터 다시 손에 익혀 보려고 하니, 더 많은 연산자와 함수는 쿼리 언어 레퍼런스를 참고해 주세요.

자주 묻는 질문

구글 시트 쿼리 함수에서 문자열 조건은 어떤 따옴표로 쓰나요?
쿼리 언어는 문자열 값을 작은따옴표나 큰따옴표로 감싸도록 되어 있습니다. QUERY 함수에서는 쿼리 문장 전체를 큰따옴표로 감싸므로, 안쪽 값은 where C = '네이버'처럼 작은따옴표로 쓰면 헷갈리지 않습니다.
QUERY 함수에서 group by를 쓰면 왜 오류가 나나요?
group by를 쓰면 select에 적은 모든 열이 group by에 들어 있거나 sum(), avg(), count(), max(), min() 같은 집계 함수로 감싸져 있어야 합니다. 이 규칙에 어긋나는 열이 있으면 쿼리가 실행되지 않습니다.
google sheets query 결과에서 일부 숫자가 빠지는 이유는 무엇인가요?
Google 도움말에 따르면 한 열에 데이터 유형이 섞여 있으면 가장 많은 유형을 그 열의 유형으로 보고, 적은 쪽 유형은 null 값으로 처리합니다. 숫자 열에 글자나 기호가 섞여 있지 않은지, 숫자가 텍스트로 저장되지 않았는지 확인해 보세요.
QUERY 함수의 contains 조건은 대소문자를 구분하나요?
네, 쿼리 언어 레퍼런스는 문자열 비교가 대소문자를 구분한다고 설명합니다. 대소문자와 상관없이 찾고 싶다면 where lower(B) contains 'brand'처럼 lower() 함수로 맞춘 뒤 비교하면 됩니다.

관련 글 더 보기

시트와 엑셀로 데이터를 요약할 때 함께 보면 좋은 글들입니다.