나는 예전에는 엑셀의 신이라고 불렸으나, 요즘은 구글 스프레드시트를 더 많이 쓰는 사람이다.
구글 스프레드시트를 더 많이 사용하게 된 계기가 QUERY함수다.
Query함수가 무엇인가?
필요한 데이터만 뽑아내고 정렬하고 그룹화하고 가공까지 해주는 슈퍼맨 같은 함수다.
쉽게 설명하자면,
• VLOOKUP이 줄 서서 김밥 한 줄 사는 거라면,
• QUERY는 고급 뷔페에 앉아서 내가 원하는 재료들로 셰프한테 주문해서
새로운 요리를 만들어 달라고 하는 것이다.
평소에 지시 받은 업무를 처리하는 방식을 보면 이해가 쉬울 것 같다.
여러 단계를 거쳐야 해결되는 문제가 명령어 한 줄로 해결이 되고, 조건 업데이트도 쉽다.
| 지시 받은 업무 🤯 | 기존 방식 (야근 확정) 😭 | QUERY 마법 (칼퇴 보장) 🚀 |
|---|---|---|
| 부서별/항목별 지출 합산(A팀 법인카드 내역 뽑기) | 내역 다운로드 ➔ 피벗테이블 생성 ➔ A팀만 페이지영역으로 넣고, 필터링 | ‘=QUERY(데이터, “SELECT Col1, SUM(Col3) WHERE Col2 = ‘A팀’ GROUP BY Col1”, 1) |
| 내 업무 대시보드 만들기(담당자가 ‘나’인 진행 중 프로젝트) | 자동필터 걸고, 내 이름 필터링한 다음, ‘완료’가 아닌 애들만 필터링해서 새로운 시트에 복사해 넣기 | ‘=QUERY(데이터, “SELECT Col1, Col3, Col5 WHERE Col2 = ‘김대리’ AND Col4 = ‘진행중’”, 1) |
| 부족한 재고 현황 파악(재고 10개 미만, 발주처 순 정렬) | 조건을 만족하는 계산 열을 추가하고, 피벗테이블 돌리고, 페이지 필드에서 조건 만족하는 값 고르고, 행 필드에 발주처 넣고, 값 필드에 재고 필드 넣어서 피벗테이블 완성 | ‘=QUERY(데이터, “SELECT Col1, Col2 WHERE Col4 < 10 ORDER BY Col5”, 1) |
| VIP 고객 집중 관리(이번 달 만료, 금액 큰 순 정렬) | 날짜 필터 설정 ➔ 내림차순 정렬 ➔ 시트 복사 | ‘=QUERY(데이터, “SELECT Col1, Col2, Col4 WHERE Col3 >= date ‘2025-11-01’ ORDER BY Col4 DESC”, 1) |
| 특정 다수 실적 묶어 보기(김과장, 이대리 등 특정 인원만) | VLOOKUP 무한 반복 or 다중 필터 체크박스 클릭 | ‘=QUERY(데이터, “SELECT Col1, Col5 WHERE Col1 MATCHES ‘김과장|이대리|박사원’”, 1) |
Query함수 사용 방법
QUERY함수의 사용법은 아래와 같다.
문법 : =QUERY( 데이터_범위 , "쿼리문" , 헤더_수 )
| 구성 요소 | 설명 | 예시 |
|---|---|---|
| 데이터_범위 | 어디서 데이터를 가져올 건지, 그 출처 (원본 데이터 시트 및 범위) | A1:F100 |
| “쿼리문” | 어떻게 가져올지 방법과 조건을 기술 → SQL 명령어 사용 | “select Col1, Col3 where Col2 > 100” |
| 헤더_수 | 범위의 첫 몇 줄이 제목(헤더)인가? | 1 (대부분 헤더가 1줄 임) |
※ 쿼리문에서 뽑아낼 열을 지정할 때, 같은 파일 안에서는 A,B,C처럼 열 이름을 써도 되나, 위에 있는 예제처럼 Col을 사용하는 것이 좋다. (Col은 대소문자를 구분한다. col이나 COL로 쓰지 않도록 하자.)
1) 나중에 IMPORTRANGE함수로 외부 데이터를 참조하면 무조건 Col으로 써야 한다.
2) A,B,C로 하면 데이터 범위를 옮기거나 데이터 앞에 열을 추가할 경우 쿼리문을 다 바꿔줘야 해서 비효율적이다.
"select A, C where B > 100" → → → "select Col1, Col3 where Col2 > 100"
※ 아래 설명에서는 이해를 쉽게 하기 위해 A,B,C처럼 문자로 된 열 이름을 사용하겠다.
자주 쓰는 ‘쿼리문’ 핵심 명령어 3가지
아래 세가지만 알아도 웬만한 보고서는 해결이 된다.
1. 데이터를 ‘선택’하고 ‘숨기기’: SELECT
SELECT는 말 그대로 **어떤 열(Column)**을 보여줄지 정하는 명령어다.
- SELECT * : 모든 열을 보여줘. (일단 펼쳐 놓고 볼 때 쓴다. 나중엔 필요한 것만 골라본다.)
- SELECT A, C, F : A, C, F 열만 보여줘.
- SELECT A, SUM(C) : A열을 기준으로 C열의 합계를 보여줘.
(그룹화할 때 쓴다. WHERE절에 GROUP BY A를 넣어줘야 작동한다.)
2. 조건에 맞는 데이터만 ‘거르기’: WHERE
WHERE는 특정 조건에 맞는 행(Row)만 필터링할 때 쓴다. 맨날 수동 필터 돌리던 그 작업을 해준다.
- WHERE D = ‘완료’ : D열의 값이 ‘완료’인 데이터만 가져온다. (문자는 작은따옴표(‘ ‘))
- WHERE C IS NOT NULL : C열의 값 중 공백이 아닌 값을 가져온다. 데이터 범위를
넉넉하게 설정 후 실제 값이 있는 행만 가져올 때 많이 사용한다. - WHERE E > 50000 : E열의 값이 50,000 초과인 데이터만 가져온다. (숫자는 따옴표 X)
- WHERE F CONTAINS ‘[샘플]’ : F열의 값에 ‘[샘플]’이 포함된 데이터만 가져온다.
WHERE F LIKE ‘%[샘플]%’ 처럼 쓸 수도 있다. %는 *의 의미다. - WHERE G >= date ‘2026-03-15’ : G열의 날짜가 2026-03-15보다 큰 날짜만 가져온다.
3. 결과를 ‘정렬’해서 보기: ORDER BY
ORDER BY는 데이터를 특정 열을 기준으로 오름차순(기본값) 또는 내림차순으로 정렬할 때 쓴다.
- ORDER BY C : C열을 기준으로 오름차순 정렬.
- ORDER BY D DESC : D열을 기준으로 내림차순 정렬. (DESC를 붙이면 내림차순!)
쿼리 함수의 구글의 공식 도움말은 아래 URL에 있다.
하지만, 지금은 보지 말자. 번역본이 그다지 감동이 없다.
https://developers.google.com/chart/interactive/docs/querylanguage
답글 남기기