구글시트 QUERY 함수는 표 전체에서 필요한 열만 선택하거나 특정 조건에 맞는 행만 골라 새로운 표처럼 보여줄 때 유용합니다.
예를 들어 주문 데이터에서 서울 지역 주문만 보기, 매출이 일정 금액 이상인 항목만 추리기, 날짜순으로 정렬하기, 상위 10개만 보여주기 같은 작업을 하나의 수식으로 처리할 수 있습니다.
Google은 QUERY 함수를 지정한 데이터 범위에 Google Visualization API Query Language 쿼리를 실행하는 함수로 설명합니다.
기본 문법은 다음과 같습니다.
=QUERY(data, query, [headers])
처음 보면 SQL처럼 보여 어렵게 느껴질 수 있지만 실제로 자주 쓰는 명령은 몇 가지뿐입니다.
1. QUERY 함수 기본 구조부터 이해하기
예를 들어 A1 범위에 다음과 같은 데이터가 있다고 가정해보겠습니다.
| A열 | B열 | C열 | D열 |
|---|---|---|---|
| 날짜 | 상품명 | 지역 | 매출 |
| 8/1 | 키보드 | 서울 | 50000 |
| 8/2 | 마우스 | 부산 | 30000 |
| 8/3 | 모니터 | 서울 | 250000 |
전체 데이터를 그대로 가져오려면 다음처럼 작성할 수 있습니다.
=QUERY(A1:D100,"select *",1)
각 부분은 다음 의미입니다.
| 부분 | 의미 |
A1:D100 | 분석할 데이터 범위 |
"select *" | 모든 열 선택 |
1 | 첫 번째 행이 제목 행이라는 의미 |
Google 공식 도움말에서도 QUERY의 기본 인수를 data, query, headers로 설명하고 있습니다.
2. 원하는 열만 가져오는 select
QUERY에서 가장 먼저 익힐 명령은 select입니다.
예를 들어 상품명과 매출만 표시하고 싶다면
=QUERY(A1:D100,"select B,D",1)
처럼 작성합니다.
결과에는 B열과 D열만 표시됩니다.
여러 열을 선택할 때는 쉼표로 구분합니다.
select A,B,D
처럼 사용할 수 있습니다.
3. 조건을 걸 때는 where 사용하기
특정 조건에 맞는 데이터만 보고 싶다면 where를 사용합니다.
예를 들어 서울 지역 데이터만 추리려면
=QUERY(A1:D100,"select * where C = '서울'",1)
처럼 작성합니다.
문자 조건은 작은따옴표로 감싸는 것이 중요합니다.
숫자 조건은 따옴표 없이 작성합니다.
예를 들어 매출이 100000 이상인 행만 가져오려면
=QUERY(A1:D100,"select * where D >= 100000",1)
처럼 사용할 수 있습니다.
4. 여러 조건을 동시에 사용할 때
두 조건을 모두 만족해야 한다면 and를 사용합니다.
예를 들어 서울 지역이면서 매출이 100000 이상인 행만 보고 싶다면
=QUERY(A1:D100,"select * where C = '서울' and D >= 100000",1)
처럼 작성합니다.
둘 중 하나만 만족해도 된다면 or를 사용할 수 있습니다.
예:
=QUERY(A1:D100,"select * where C = '서울' or C = '부산'",1)
조건이 많아질수록 괄호와 따옴표 위치를 잘 확인해야 합니다.
5. 특정 단어가 포함된 값 찾기
텍스트에 특정 단어가 들어간 행만 추리고 싶다면 contains를 사용할 수 있습니다.
예를 들어 상품명에 마우스라는 단어가 포함된 행만 가져오려면
=QUERY(A1:D100,"select * where B contains '마우스'",1)
처럼 작성합니다.
정확히 일치하지 않아도 해당 단어가 포함되어 있으면 결과에 표시됩니다.
6. 빈칸이 아닌 행만 추리기
실무에서 QUERY를 사용할 때 매우 자주 쓰는 조건입니다.
A열에 값이 있는 행만 가져오고 싶다면
=QUERY(A1:D100,"select * where A is not null",1)
처럼 작성합니다.
반대로 빈칸인 행만 보고 싶다면
where A is null
을 사용할 수 있습니다.
빈 행이 많은 관리 시트에서 필요한 데이터만 깔끔하게 정리할 때 유용합니다.
7. 정렬할 때는 order by 사용하기
QUERY 결과를 특정 열 기준으로 정렬할 수 있습니다.
예를 들어 매출이 높은 순서대로 정렬하려면
=QUERY(A1:D100,"select * order by D desc",1)
처럼 작성합니다.
desc는 내림차순입니다.
반대로 낮은 순서대로 정렬하려면
asc
를 사용합니다.
=QUERY(A1:D100,"select * order by D asc",1)
처럼 작성할 수 있습니다.
8. 조건과 정렬을 함께 쓰기
QUERY의 장점은 여러 기능을 한 수식 안에서 조합할 수 있다는 점입니다.
예를 들어 서울 지역만 추린 뒤 매출이 높은 순서로 정렬하려면
=QUERY(A1:D100,"select * where C = '서울' order by D desc",1)
처럼 작성합니다.
순서는 일반적으로
select → where → order by
형태로 작성합니다.
9. 상위 몇 개만 보고 싶다면 limit
결과를 몇 개만 보여주고 싶다면 limit을 사용할 수 있습니다.
예를 들어 매출 상위 5개만 보고 싶다면
=QUERY(A1:D100,"select * order by D desc limit 5",1)
처럼 작성합니다.
이 방식은 상위 매출 상품, 상위 클릭 키워드, 상위 주문 내역처럼 랭킹 데이터를 만들 때 유용합니다.
10. 결과 열 이름 바꾸기
QUERY 결과의 제목을 원하는 이름으로 바꾸고 싶다면 label을 사용할 수 있습니다.
예를 들어 D열 제목을 총매출로 바꾸고 싶다면
=QUERY(A1:D100,"select B,D label D '총매출'",1)
처럼 작성합니다.
여러 열을 동시에 바꾸려면 각각 지정할 수 있습니다.
예:
label B '상품', D '매출액'
결과 표를 별도 보고서처럼 사용할 때 유용합니다.
11. 합계나 평균도 계산할 수 있다
QUERY에서는 단순 조회뿐 아니라 집계도 가능합니다.
예를 들어 D열 매출 합계를 구하려면
=QUERY(A1:D100,"select sum(D)",1)
평균을 구하려면
=QUERY(A1:D100,"select avg(D)",1)
처럼 사용할 수 있습니다.
Google 공식 도움말의 QUERY 예시에도 평균과 pivot을 사용하는 형태가 안내되어 있습니다.
12. 지역별 매출 합계를 보고 싶다면 group by
같은 항목끼리 묶어서 합계를 계산할 때는 group by를 사용할 수 있습니다.
예를 들어 지역별 매출 합계를 보고 싶다면
=QUERY(A1:D100,"select C,sum(D) group by C",1)
처럼 작성합니다.
결과는 서울, 부산 등 지역별로 묶여 매출 합계가 표시됩니다.
매출 데이터나 주문 데이터 요약표를 만들 때 특히 유용합니다.
13. QUERY 세 번째 인수 headers는 무엇일까
QUERY 마지막의 숫자는 제목 행의 개수를 의미합니다.
예를 들어 첫 번째 행이 제목이라면
1
을 사용합니다.
제목 행이 없다면
0
을 사용할 수 있습니다.
예:
=QUERY(A2:D100,"select A,B",0)
데이터 구조가 복잡한 경우 Google Sheets가 헤더 수를 추정하도록 둘 수도 있지만, 직접 정확히 지정하는 편이 결과를 예측하기 쉽습니다.
14. PARSE_ERROR가 뜨는 이유
QUERY를 사용할 때 자주 보이는 오류 중 하나가 PARSE_ERROR입니다.
이 오류는 보통 QUERY 문법을 제대로 해석하지 못했을 때 발생합니다.
다음 항목을 확인하세요.
- 큰따옴표가 빠지지 않았는지
- 문자 조건에 작은따옴표가 들어갔는지
- 열 이름을 잘못 입력하지 않았는지
- select, where, order by 순서가 맞는지
- 괄호가 제대로 닫혀 있는지
예를 들어
where C = 서울
처럼 작성하면 오류가 날 수 있습니다.
문자 조건은
where C = '서울'
처럼 작성해야 합니다.
15. 숫자와 텍스트가 섞여 있으면 결과가 이상할 수 있다
Google 공식 도움말은 하나의 열에 여러 데이터 유형이 섞여 있을 경우 가장 많이 사용된 데이터 유형이 해당 열의 유형으로 결정되고, 소수 유형은 null 값으로 처리될 수 있다고 설명합니다.
예를 들어 한 열에 대부분 숫자가 들어 있는데 일부 셀만 텍스트 형태의 숫자로 저장되어 있다면 QUERY 결과에서 일부 값이 빠진 것처럼 보일 수 있습니다.
이럴 때는 원본 데이터 형식을 먼저 통일하는 것이 좋습니다.
16. 다른 탭의 데이터를 QUERY로 가져오기
같은 구글 스프레드시트 파일 안의 다른 시트를 바로 QUERY 대상으로 사용할 수도 있습니다.
예를 들어 매출원본 시트의 A 범위를 분석하려면
=QUERY(매출원본!A:D,"select A,B,D where D > 100000",1)
처럼 작성할 수 있습니다.
시트 이름에 공백이 있다면
=QUERY('매출 원본'!A:D,"select A,B,D where D > 100000",1)
처럼 시트 이름을 작은따옴표로 감싸는 방식이 안전합니다.
17. 다른 구글시트 파일이라면 IMPORTRANGE와 조합하기
다른 구글 스프레드시트 파일의 데이터를 QUERY로 분석하려면 IMPORTRANGE와 함께 사용할 수 있습니다.
예:
=QUERY(IMPORTRANGE("원본URL","매출원본!A:D"),"select Col1,Col2,Col4 where Col4 > 100000",1)
여기서 주의할 점이 있습니다.
IMPORTRANGE 결과처럼 배열 형태의 데이터를 QUERY 대상으로 사용할 때는 A, B, C 대신
Col1Col2Col3
형태로 열을 지정하는 경우가 많습니다.
앞서 작성한 구글시트 IMPORTRANGE 사용법과 연결해서 익히면 이해하기 쉽습니다.
18. QUERY와 VLOOKUP의 차이
둘 다 데이터를 찾는 데 사용하지만 목적이 다릅니다.
| 함수 | 적합한 작업 |
| VLOOKUP | 특정 기준값 하나를 찾아 관련 값 반환 |
| QUERY | 여러 행을 조건에 맞게 추리고 정렬·집계 |
| IMPORTRANGE | 다른 구글시트 파일의 데이터 가져오기 |
예를 들어 사번 하나를 입력해 직원 이름을 찾는다면 VLOOKUP이 편하고,
마케팅팀 직원 전체를 매출 순으로 표시
처럼 여러 행을 뽑아야 한다면 QUERY가 적합합니다.
19. QUERY가 느릴 때 확인할 것
데이터가 많아지면 QUERY 계산도 느려질 수 있습니다.
특히 실제 데이터는 1,000행인데
A:Z
전체 열을 계속 참조하고 있다면 필요 이상으로 넓은 범위를 계산하게 됩니다.
가능하면
A1:D1000
처럼 실제 사용하는 범위를 지정하는 것이 좋습니다.
또 여러 개의 IMPORTRANGE와 QUERY를 중첩해서 사용하는 경우에는 원본 구조를 단순하게 만드는 것도 도움이 됩니다.
자주 쓰는 QUERY 수식 모음
전체 데이터 가져오기
=QUERY(A1:D100,"select *",1)
원하는 열만 가져오기
=QUERY(A1:D100,"select A,B,D",1)
특정 조건만 가져오기
=QUERY(A1:D100,"select * where C = '서울'",1)
숫자 조건 사용하기
=QUERY(A1:D100,"select * where D >= 100000",1)
내림차순 정렬
=QUERY(A1:D100,"select * order by D desc",1)
상위 5개만 표시
=QUERY(A1:D100,"select * order by D desc limit 5",1)
빈칸 제외
=QUERY(A1:D100,"select * where A is not null",1)
지역별 매출 합계
=QUERY(A1:D100,"select C,sum(D) group by C",1)
QUERY가 안 될 때 확인 순서
수식이 작동하지 않는다면 아래 순서대로 확인하면 됩니다.
- data 범위가 정확한지 확인
- query 전체가 큰따옴표 안에 들어 있는지 확인
- 문자 조건에 작은따옴표가 있는지 확인
- 열 이름이 범위 안에 존재하는지 확인
- select → where → order by 순서 확인
- headers 숫자가 실제 제목 행과 맞는지 확인
- 열 안에 숫자와 텍스트 형식이 섞여 있지 않은지 확인
- IMPORTRANGE와 조합했다면 Col1, Col2 형태를 확인
QUERY는 처음에는 문법 때문에 어렵게 느껴질 수 있지만, 실제 업무에서는 select, where, order by, limit 네 가지만 익혀도 상당히 많은 작업을 처리할 수 있습니다.
특히 원본 데이터를 건드리지 않고 조건에 맞는 데이터만 별도 표로 자동 정리하고 싶을 때 가장 활용도가 높은 구글시트 함수 중 하나입니다.
