반복 보고 표를 자동으로 만들려면 원본 범위, 조건, 묶을 기준을 먼저 정한 다음 QUERY로 필요한 열만 뽑으세요. 아래 예제에서 주문 표의 완료 건만 팀별로 합산하고 큰 금액부터 정렬합니다. QUERY는 열을 고르고 조건을 적용하는 데서 끝나지 않고 group by와 집계 함수로 요약도 만들 수 있습니다. 단, 열의 숫자·날짜가 텍스트로 섞였거나 결과가 놓일 셀에 값이 있으면 원본 행이 빠지거나 출력이 막힐 수 있으니 실제 값과 빈 출력 공간도 함께 확인합니다.
QUERY는 조건 조회와 반복 요약을 한 수식으로 만들 때 씁니다
Google Sheets의 QUERY 함수는 지정한 범위에 Google Visualization API Query Language 질의를 실행합니다. SQL과 비슷해 보이지만 SQL 전체 기능을 그대로 제공하지는 않습니다. 가장 자주 쓰는 절은 select(가져올 열), where(남길 행의 조건), group by(그룹 기준), order by(정렬), limit(결과 행 수 제한), label(결과 열 제목)입니다. 절을 적는 순서도 정해져 있으므로 예제에서 필요한 부분만 바꾸는 편이 처음부터 조합하는 것보다 안전합니다.
기본 모양은 =QUERY(데이터범위, "질의문", 머리글행수)입니다. 첫 번째 인수는 원본 범위, 두 번째는 따옴표 안의 질의문, 세 번째는 원본 맨 위에 포함된 머리글 행 수입니다. Google은 머리글 수를 생략하거나 -1로 주면 추정한다고 설명합니다. 표의 첫 행이 열 이름이면 예제처럼 1을 명시해 자동 추정에 맡기지 마세요. 첫 행부터 데이터라면 0을 씁니다.
아래에서 말하는 ‘팀’, ‘상태’, ‘매출’은 열의 표시 제목입니다. 질의문 안에서는 표시 제목 대신 범위의 열 식별자 A, B, C를 사용합니다. 입력 데이터가 배열로 새로 만들어져 원래 열 문자를 쓸 수 없는 구성이라면 Col1, Col2 형식이 필요할 수 있습니다. 먼저 실제 입력 범위에서 Google 공식 예제의 열 표기를 확인하세요.
합성 주문 표를 시트에 붙여 넣고 시작합니다
다음 표는 수식 결과를 손으로도 검산할 수 있도록 만든 가상 데이터입니다. 첫 행을 포함해 A1:E9 범위를 사용합니다. 날짜 열은 화면에 날짜처럼 보이는 문자열이 아니라 Google Sheets가 날짜 값으로 인식하는 셀이어야 하고, 금액 열은 숫자여야 합니다. 표의 표시 형식과 실제 저장 값은 다를 수 있으므로 가져온 CSV라면 먼저 날짜·금액 셀을 확인하세요.
| 날짜(A) | 팀(B) | 상태(C) | 항목(D) | 금액(E) |
|---|---|---|---|---|
| 2026-10-01 | 마케팅 | 완료 | 디자인 | 120000 |
| 2026-10-02 | 영업 | 완료 | 교육 | 180000 |
| 2026-10-03 | 마케팅 | 대기 | 인쇄 | 90000 |
| 2026-10-04 | 영업 | 완료 | 행사 | 210000 |
| 2026-10-05 | 마케팅 | 완료 | 교육 | 150000 |
| 2026-10-06 | 영업 | 취소 | 인쇄 | 60000 |
| 2026-10-07 | 마케팅 | 완료 | 행사 | 80000 |
| 2026-10-08 | 영업 | 완료 | 디자인 | 130000 |
서로 다른 상태가 같은 열에 들어간 이유는 조건 필터를 보여 주기 위해서입니다. 실무 원본에는 주문 번호 같은 고유 식별 열도 두는 편이 중복 입력과 누락을 추적하기 쉽습니다. 이 예제 표에는 개인 정보나 실제 매출 자료가 들어 있지 않습니다.
조건에 맞는 행과 필요한 열만 남깁니다
완료된 행만 날짜 내림차순으로 보고 싶다면 결과를 표시할 빈 시트의 A1에 다음 수식을 넣습니다.
=QUERY(A1:E9, "select A, B, D, E where C = '완료' order by A desc", 1)
select A, B, D, E는 결과에 날짜·팀·항목·금액 열만 가져옵니다. where C = '완료'는 상태 열이 ‘완료’인 행만 남기고, order by A desc는 날짜가 최신인 행부터 보여 줍니다. 문자 조건은 질의문 안에서 작은따옴표로 둘러쌉니다. 완료 행은 6개이므로 출력 표에도 6개 데이터 행이 보여야 합니다. 하나도 안 나오면 ‘완료’ 글자의 앞뒤 공백, 실제 셀 값, C열을 올바르게 보고 있는지 확인합니다.
where에는 여러 조건을 and 또는 or로 연결할 수 있습니다. 다만 조건을 늘리기 전에 한 가지 조건만 실행해 기준 열이 맞는지 먼저 확인하세요. 조건이 추가될 때마다 결과 행 수를 기록하면 어느 조건에서 데이터가 사라졌는지 찾기 쉽습니다. 날짜 조건과 상태 조건을 함께 사용하는 예제는 아래에서 확인합니다.
팀별 완료 금액과 건수를 묶어 반복 보고합니다
완료된 주문을 팀별로 합산하고 큰 금액부터 보고 싶다면 다음 질의문을 사용합니다.
=QUERY(A1:E9, "select B, sum(E) where C = '완료' group by B order by sum(E) desc label B '팀', sum(E) '완료 금액'", 1)
이 수식은 팀 열 B로 묶고, 금액 열 E를 sum으로 더합니다. 결과는 영업 520,000원, 마케팅 350,000원 순입니다. 두 팀 합계 870,000원은 상태가 완료인 원본 여섯 행의 금액을 직접 더한 값과 같아야 합니다. 숫자 표시가 원 단위가 아니더라도 셀 서식에서 통화·숫자 형식을 지정할 수 있습니다.
group by를 쓸 때 결과로 요청한 일반 열은 그룹 기준에 들어 있어야 하고, 나머지 값은 sum, count, avg, min, max 같은 집계 함수로 요약해야 합니다. 예를 들어 B열 팀과 완료 건수를 함께 보려면 select B, count(A) ... group by B처럼 그룹 열과 집계를 함께 씁니다. 팀 열을 그룹화하지 않은 채 select B, sum(E)를 요청하면 한 팀당 한 줄로 어떤 값을 남길지 정할 수 없어 구문 오류가 됩니다.
label은 반환 결과의 열 제목만 바꾸며 원본 셀이나 원본 머리글을 수정하지 않습니다. 집계 결과를 다시 보고서에 쓸 예정이라면 수식 안의 별칭을 정해 두고, 결과 숫자와 원본 필터 조건이 일치하는지 표본 한두 개를 따로 계산하세요.
날짜 기준으로 기간을 좁히고 팀별 합계를 다시 냅니다
10월 4일부터의 완료 금액만 팀별로 보려면 실제 날짜 값을 기준으로 ISO 날짜 리터럴을 사용합니다.
=QUERY(A1:E9, "select B, sum(E) where A >= date '2026-10-04' and C = '완료' group by B order by sum(E) desc label B '팀', sum(E) '완료 금액'", 1)
이때 결과는 영업 340,000원, 마케팅 230,000원이며 합계는 570,000원입니다. date '2026-10-04'의 연-월-일 순서를 지키고, A열 날짜가 텍스트로 저장되지 않았는지 확인합니다. 날짜 형식이 맞지 않는 값은 날짜 조건에서 기대와 다른 결과를 낼 수 있습니다. Google Sheets의 화면 표시를 날짜로 바꿨다는 사실만으로 값이 실제 날짜로 변환됐다고 단정하지 마세요.
보고 기간이 매번 바뀌면 날짜를 입력한 셀과 질의문을 연결할 수 있지만, 문자열 조합을 처음부터 쓰기 전에 위의 고정 날짜 예제로 범위와 조건을 검산합니다. 셀을 참조하는 수식의 따옴표·연결 기호가 헷갈리면 값을 실제 개인정보가 없는 복사본에 넣고, 수식 전체의 분석 오류와 구분자 점검 순서를 함께 확인하세요. 파일 전체의 로캘을 바꾸는 조치는 숫자·날짜 표시 등 다른 사용자 설정에도 영향을 줄 수 있으므로 오류 메시지 하나만 보고 변경하지 않습니다.
열 식별자와 머리글 행 수를 원본에 맞춥니다
질의문에 데이터 머리글의 한글 제목(예: 팀)을 그대로 넣는 것이 아니라 표 범위에서 그 열을 가리키는 문자(예: B)를 씁니다. 실제 시트가 A열부터 시작하지 않더라도 QUERY에 넘긴 범위의 열 식별자를 따라가야 합니다. 예를 들어 범위를 C2:G로 넘긴다면 그 범위 안의 첫 열을 어떤 표기로 부를지 Google 공식 예제와 현재 수식의 입력 형태에서 확인하세요. 범위를 잘라 바꾸면서 예전 열 문자를 그대로 두면 엉뚱한 열을 조건으로 읽을 수 있습니다.
세 번째 인수는 헤더 글자가 몇 개 보이는지가 아니라 QUERY에 전달한 범위 안에서 맨 위쪽에 머리글로 취급할 행 수입니다. 범위를 A1:E로 잡고 1행이 머리글이면 1, 데이터가 A1부터 시작하면 0으로 지정합니다. 머리글을 포함하는 범위에 0을 주면 제목 행도 데이터처럼 반환될 수 있고, 제목을 뺀 범위에 1을 주면 첫 실제 데이터 행을 헤더로 오인할 수 있습니다.
Google 공식 안내는 혼합 데이터 유형이 있는 열에 대해 다수 데이터 유형을 해당 열의 유형으로 사용하고, 소수 유형 값은 null로 처리한다고 설명합니다. 금액 열에 숫자와 ‘미정’, ‘10만원’ 같은 문자가 섞이거나 날짜가 날짜 값과 텍스트로 섞이면 일부 행이 사라진 것처럼 보일 수 있습니다. 원본 열에서 숫자·날짜를 한 형식으로 정리하거나 숫자 열과 메모 열을 분리하고, 변환 뒤 원본과 결과 행 수를 비교하세요.
결과가 비거나 행이 빠지면 오류 종류부터 분리합니다
| 보이는 현상 | 먼저 볼 부분 | 안전한 확인 방법 |
|---|---|---|
| 질의문 분석 오류 | 절의 순서, 따옴표 쌍, 열 식별자, group by와 select 조합 | select만 둔 최소 질의부터 실행하고 조건·그룹·정렬을 하나씩 다시 추가 |
| 예상보다 결과 행이 적음 | 조건에 쓴 값의 공백·철자, 실제 기준 열, 혼합 숫자·날짜 형식 | 필터 없이 해당 열만 조회하고 화면 값과 실제 데이터 유형을 확인 |
| 집계 합계가 작거나 비어 있음 | sum 대상 열이 숫자인지, 금액에 문자 값이 끼었는지 | 합계 대상 원본을 분리해 숫자형인지 검사하고 누락된 행을 표본 대조 |
| 팀당 한 줄 요약이 안 됨 | group by에 그룹 열이 있는지, 다른 select 열을 집계했는지 | 수식 결과 열을 하나씩 검토하고 그룹 열과 집계 열만으로 다시 구성 |
| 결과를 펼칠 수 없다는 오류 | 수식 아래나 오른쪽 출력 범위 안에 남아 있는 값·병합 셀 | 원본을 지우지 말고 별도의 빈 탭에 수식을 넣어 결과가 충분히 펼쳐지는지 확인 |
| 같은 조건인데 매번 빈 결과 | 표시 이름과 실제 셀 값의 차이, 텍스트 공백, 날짜가 텍스트인지 여부 | 원본 셀을 복사해 조건 문자열과 대조하고 수식 범위를 작게 줄여 재현 |
오류를 감추려고 IFERROR로 감싼 채 공유하면 원본 범위가 깨졌거나 숫자가 빠진 상황이 계속 숨을 수 있습니다. 먼저 오류가 난 작은 합성 범위에서 QUERY가 기대한 행과 합계를 내는지 고친 다음, 실제 데이터의 민감한 열을 빼고 복사본에서 적용하세요.
한 번 필터링은 FILTER, 메뉴형 요약은 피벗과 비교합니다
| 도구 | 잘 맞는 일 | 선택 기준 |
|---|---|---|
QUERY | 필요 열 선택, 여러 조건, 정렬, 그룹별 합계·건수, 반복되는 결과 표 | 수식 결과를 다른 계산의 입력으로 쓰거나 매번 같은 요약을 자동 갱신할 때 |
FILTER | 원본 행에서 조건에 맞는 행만 빠르게 추출 | 열 재배열이나 그룹 합계 없이 조건 일치 행만 보이면 될 때 |
| 피벗 테이블 | 행·열·값·필터 영역을 화면에서 바꾸며 비교 | 비수식 편집자가 보고서 기준을 자주 바꾸거나 대화형 요약을 만들어야 할 때 |
예를 들어 완료 상태인 원본 행만 보고 싶으면 FILTER가 짧고, 팀별 완료 금액처럼 보고 표를 수식으로 고정하려면 QUERY가 편합니다. 팀·월·상품을 바꿔가며 결과를 탐색하려면 피벗 편집기가 맞을 수 있습니다. 어느 방법이 항상 더 빠르거나 더 정확한 것은 아니므로 실제 표의 갱신 주기와 함께 편집하는 사람이 무엇을 수정해야 하는지로 고르세요. FILTER 공식 도움말과 Sheets 피벗 테이블 공식 안내도 작업 흐름을 비교할 때 참고할 수 있습니다.
피벗 테이블을 처음 만드는 단계나 이미 만든 피벗에 새 행이 나타나지 않는 문제는 각각 피벗 테이블 실습과 피벗 원본 범위 진단에서 별도로 확인하세요. QUERY와 피벗은 서로 대체하는 고정 기능이라기보다, 같은 원자료를 다른 방식으로 요약하는 선택지입니다.
팀에 공유하기 전에 합계·행 수·새 데이터 반영을 검산합니다
- 원본에 열 제목 한 행, 한 행당 주문 한 건처럼 일정한 구조가 있는지 확인합니다. 합칠 필요 없는 설명 행이나 중간 소계 행은 원본 범위에서 분리합니다.
- 빈 시트에 예제를 붙여 넣어
QUERY를 실행하고, 머리글 수와 열 식별자를 확인합니다. - 조건을 한 개씩 넣으면서 결과 행 수를 기록합니다. 팀별 합계는 작은 표본 몇 건을 직접 더하고 전체 합계와 비교합니다.
- 기간 필터를 쓴다면 기간 시작일의 포함 여부와 실제 날짜 유형을 확인합니다. 첫 날짜와 마지막 날짜 데이터를 각각 대조합니다.
- 새 원본 행을 한 건 추가해 수식의 범위가 그 행까지 포함하는지 확인합니다.
A1:E9처럼 끝 행을 고정했다면 새 행을 범위에 추가해야 합니다. - 수식 결과를 다른 사람이 볼 경우, 원본의 개인 정보·급여·고객 정보가 함께 노출되지 않는지 접근 권한을 따로 점검합니다. QUERY는 공유 권한이나 데이터 접근을 제한하는 보안 기능이 아닙니다.
합계와 행 수가 원본과 일치하고 새 행도 의도대로 들어온 뒤에만 업무용 시트에 옮기세요. 운영 표에서 시험할 때는 기존 계산식이나 원본 표를 덮어쓰지 않도록 복사본을 사용하고, 최종 수식이 어느 셀에서 어떤 범위를 읽는지 제목 옆에 기록해 두면 다음 담당자가 수정하기 쉽습니다.
자주 묻는 질문
QUERY에서 열 제목 대신 A, B를 쓰는 이유가 있나요?
질의문은 머리글의 표시 문구가 아니라 열 식별자를 사용합니다. 범위를 잘라내거나 배열을 만들어 넘겼다면 실제 QUERY 입력 데이터에서 열이 어떤 식별자로 잡히는지 확인하세요. Google Sheets 도움말은 열 문자 표기와 Col 표기를 모두 예시합니다.
세 번째 인수는 꼭 써야 하나요?
필수는 아니지만, 공식 함수 구문에서 선택 인수입니다. 머리글 수를 생략하면 Sheets가 추정하므로, 원본 첫 행이 제목이면 1, 첫 행부터 데이터면 0을 명시해 추정으로 인한 오해를 줄이세요.
QUERY에서 일부 금액 행이 합계되지 않는 이유는 뭔가요?
QUERY가 한 열의 대부분을 숫자로 판단하면 적은 수의 문자열 값은 null로 취급할 수 있습니다. 셀에 표시된 쉼표가 아니라 값 자체가 숫자인지, 숫자처럼 보이는 문자나 ‘미정’ 텍스트가 섞이지 않았는지 원본에서 검사하세요.
날짜 조건은 화면에 보이는 형식을 넣으면 되나요?
질의문 안의 날짜 리터럴은 date 'yyyy-MM-dd' 형식을 사용합니다. 입력 범위의 셀도 실제 날짜 값이어야 합니다. 날짜가 텍스트라면 우선 작은 시험 범위에서 변환 결과와 기간 경계를 확인하세요.
QUERY가 피벗 테이블을 없애 주나요?
아니요. QUERY는 수식으로 반복 결과를 만들 때 편하고, 피벗은 행·열·값·필터를 시각적으로 조정할 때 편합니다. 같은 표라도 보고서를 바꾸는 사람과 갱신 방식에 따라 알맞은 도구가 다릅니다.
보고서 시트의 수식이 원본 데이터 보안도 지켜 주나요?
아니요. QUERY는 가져올 행과 열을 가공할 뿐 공유 권한을 제한하지 않습니다. 다른 사용자에게 원본 탭을 공유할 수 있는지, 보고서에 민감한 값이 남지 않는지 Google Sheets의 실제 공유 설정을 따로 검토해야 합니다.
다음에 볼 Google Sheets 안내
Google 공식 자료
- Google Sheets QUERY 함수 도움말 — 함수 인수, 머리글 수, 혼합 데이터 유형, A·Col 열 표기
- Google Visualization API Query Language Reference — 절의 순서, 그룹화 규칙, 집계, 날짜·문자 리터럴
- Google Sheets FILTER 함수 도움말 — 조건을 만족하는 원본 행 추출
- Google Sheets 피벗 테이블 만들기 및 사용 — 원본 표·행·열·값·필터 편집기
- 스프레드시트 위치·계산 설정 — 파일 전체 로캘·시간대 변경 범위와 설정 위치
- Google Sheets 함수 목록 — QUERY와 관련 함수의 공식 목록