본문 바로가기
카테고리 없음

구글 시트 QUERY 함수 완벽 가이드 - SQL로 스프레드시트를 데이터베이스처럼 활용하기

by 시트자동화 2025. 10. 22.

구글 시트 Query 관련 이미지
구글 시트 Query

복잡한 데이터 분석을 위해 매번 필터와 정렬을 반복하느라 지치셨나요? 구글 시트의 QUERY 함수는 SQL 쿼리 언어를 사용하여 스프레드시트를 강력한 데이터베이스처럼 활용할 수 있게 해주는 혁신적인 기능입니다. 한 줄의 수식으로 필터링, 정렬, 그룹화, 집계를 모두 처리할 수 있어 작업 효율이 비약적으로 향상됩니다. QUERY 함수의 기본 문법과 SELECT 구문 이해하기를 통해 원하는 열과 행을 자유롭게 선택하는 방법을 배우고, WHERE와 ORDER BY로 데이터 필터링과 정렬 자동화하기로 복잡한 조건 검색을 구현하는 기술을 익히게 됩니다. 마지막으로 GROUP BY와 집계 함수로 피벗 테이블 대체하기까지 마스터하면 동적 보고서 작성이 가능해집니다. 실전에서 바로 쓸 수 있는 예제와 함께 상세히 안내해드리겠습니다.

QUERY 함수의 기본 문법과 SELECT 구문 이해하기

QUERY 함수는 구글 시트에서만 사용 가능한 강력한 함수로, Google Visualization API Query Language라는 SQL 유사 언어를 사용합니다. 기본 구조는 =QUERY(데이터범위, ""쿼리문"", 헤더행수)입니다. 첫 번째 인수는 분석할 데이터 범위를, 두 번째 인수는 큰따옴표로 감싼 쿼리 명령을, 세 번째 인수는 선택사항으로 헤더 행의 개수를 지정합니다. 가장 기본적인 SELECT 구문부터 살펴보겠습니다. =QUERY(A1:D100, ""SELECT *"")는 A1부터 D100 범위의 모든 열과 행을 그대로 반환합니다. 별표(*)는 모든 열을 의미하는 와일드카드입니다. 특정 열만 선택하려면 열 식별자를 사용합니다. QUERY 함수에서 열은 A, B, C 대신 Col1, Col2, Col3으로 표현되거나 실제 열 문자를 그대로 사용할 수 있습니다. =QUERY(A1:D100, ""SELECT A, C, D"")는 A, C, D 열만 추출합니다. 이는 원본 데이터에서 필요한 정보만 골라내는 뷰를 만드는 것과 같습니다. 열의 순서도 자유롭게 변경할 수 있어 =QUERY(A1:D100, ""SELECT D, A, B"")처럼 작성하면 D열이 첫 번째로, A열이 두 번째로 표시됩니다. SELECT 구문에서는 레이블을 지정하여 결과의 헤더명을 변경할 수도 있습니다. =QUERY(A1:D100, ""SELECT A, B, C LABEL A '이름', B '나이', C '점수'"")처럼 LABEL 키워드 뒤에 원하는 헤더명을 작은따옴표로 감싸서 지정하면 됩니다. 이는 보고서를 만들 때 원본의 기술적인 열 이름을 사용자 친화적인 이름으로 바꾸는 데 유용합니다. 수식 내에서 계산도 가능합니다. =QUERY(A1:D100, ""SELECT A, B, C*D"")는 C열과 D열을 곱한 결과를 새로운 열로 추가합니다. 사칙연산뿐만 아니라 다양한 연산자를 사용할 수 있어 매출단가와 수량을 곱해 총액을 계산하거나, 점수들의 평균을 구하는 등의 작업이 쿼리 내에서 직접 처리됩니다. 헤더 행 처리도 중요합니다. 세 번째 인수를 생략하거나 1로 설정하면 첫 번째 행을 헤더로 인식하고, 0으로 설정하면 모든 행을 데이터로 취급합니다. -1을 사용하면 QUERY 함수가 자동으로 판단하게 됩니다.

WHERE와 ORDER BY로 데이터 필터링과 정렬 자동화하기

SELECT로 열을 선택하는 것을 넘어, WHERE 절을 추가하면 특정 조건을 만족하는 행만 필터링할 수 있습니다. =QUERY(A1:D100, ""SELECT * WHERE B > 50"")은 B열의 값이 50보다 큰 행만 반환합니다. 이는 수동 필터를 적용하는 것과 같지만, 수식이므로 원본 데이터가 변경되면 자동으로 결과가 업데이트됩니다. 텍스트 조건도 사용할 수 있습니다. =QUERY(A1:D100, ""SELECT * WHERE A = '서울'"")은 A열이 정확히 서울인 행만 추출합니다. 텍스트는 반드시 작은따옴표로 감싸야 하며, 대소문자를 구분하지 않습니다. LIKE 연산자를 사용하면 부분 일치 검색이 가능합니다. =QUERY(A1:D100, ""SELECT * WHERE A LIKE '%김%'"")은 A열에 김이 포함된 모든 행을 찾습니다. 퍼센트 기호는 SQL의 와일드카드로 앞뒤 어떤 문자가 와도 상관없다는 의미입니다. 여러 조건을 결합할 때는 AND와 OR를 사용합니다. =QUERY(A1:D100, ""SELECT * WHERE B > 50 AND C = '합격'"")은 B열이 50 초과이면서 동시에 C열이 합격인 경우만 추출합니다. =QUERY(A1:D100, ""SELECT * WHERE A = '서울' OR A = '부산'"")은 A열이 서울이거나 부산인 행을 모두 포함합니다. IN 연산자로 더 간결하게 표현할 수도 있습니다. =QUERY(A1:D100, ""SELECT * WHERE A IN ('서울', '부산', '대구')"")처럼 여러 값 중 하나와 일치하는지 확인할 수 있습니다. 날짜 조건도 강력합니다. =QUERY(A1:D100, ""SELECT * WHERE D > date '2024-01-01'"")은 D열의 날짜가 2024년 1월 1일 이후인 행만 추출합니다. date 키워드를 사용하여 날짜 리터럴을 표현하며, 형식은 'YYYY-MM-DD'입니다. ORDER BY 절은 결과를 정렬합니다. =QUERY(A1:D100, ""SELECT * ORDER BY B DESC"")는 B열 기준으로 내림차순 정렬하며, DESC 대신 ASC를 사용하면 오름차순입니다. 여러 열로 정렬할 때는 =QUERY(A1:D100, ""SELECT * ORDER BY A ASC, B DESC"")처럼 쉼표로 구분하여 우선순위를 지정합니다. WHERE와 ORDER BY를 함께 사용하면 =QUERY(A1:D100, ""SELECT A, B, C WHERE B > 50 ORDER BY C DESC"")처럼 필터링 후 정렬까지 한 번에 처리됩니다. 절의 순서는 SELECT - WHERE - ORDER BY 순서를 따라야 합니다.

GROUP BY와 집계 함수로 피벗 테이블 대체하기

QUERY 함수의 진정한 힘은 GROUP BY 절과 집계 함수를 활용한 데이터 요약에서 나타납니다. GROUP BY는 특정 열의 값을 기준으로 데이터를 그룹화하여 집계하는 기능입니다. =QUERY(A1:D100, ""SELECT A, SUM(C) GROUP BY A"")는 A열의 고유한 값별로 C열의 합계를 계산합니다. 예를 들어 지역별 매출 데이터에서 각 지역의 총 매출을 자동 계산할 수 있습니다. SUM 외에도 다양한 집계 함수가 있습니다. COUNT는 개수를 세고, AVG는 평균을, MAX와 MIN은 최댓값과 최솟값을 반환합니다. =QUERY(A1:D100, ""SELECT A, COUNT(B), AVG(C) GROUP BY A"")는 A열 기준으로 그룹화하여 B열의 개수와 C열의 평균을 동시에 계산합니다. 여러 열로 그룹화하는 것도 가능합니다. =QUERY(A1:D100, ""SELECT A, B, SUM(D) GROUP BY A, B"")는 A열과 B열의 조합별로 D열을 합산합니다. 예를 들어 지역별, 제품별 매출 합계를 구할 때 사용됩니다. GROUP BY와 ORDER BY를 결합하면 더욱 강력합니다. =QUERY(A1:D100, ""SELECT A, SUM(C) GROUP BY A ORDER BY SUM(C) DESC"")는 그룹별 합계를 계산한 후 합계가 큰 순서대로 정렬하여 상위 지역이나 제품을 파악할 수 있게 합니다. LIMIT 절을 추가하면 결과 개수를 제한할 수 있습니다. =QUERY(A1:D100, ""SELECT A, SUM(C) GROUP BY A ORDER BY SUM(C) DESC LIMIT 5"")는 상위 5개만 표시하여 TOP 5 보고서를 만듭니다. PIVOT 절을 사용하면 크로스탭 형태의 보고서도 가능하지만, 구글 시트의 QUERY 함수에서는 PIVOT이 완벽히 지원되지 않으므로 복잡한 피벗은 피벗 테이블 기능을 함께 사용하는 것이 좋습니다. WHERE 절과 GROUP BY를 결합하면 특정 조건의 데이터만 집계할 수 있습니다. =QUERY(A1:D100, ""SELECT A, SUM(D) WHERE B = '완료' GROUP BY A"")는 B열이 완료인 행만 필터링하여 A열 기준으로 D열을 합산합니다. 레이블을 활용하면 결과를 더욱 명확하게 표현할 수 있습니다. =QUERY(A1:D100, ""SELECT A, SUM(C) GROUP BY A LABEL A '지역', SUM(C) '총매출'"")처럼 헤더명을 한글로 지정하여 사용자 친화적인 보고서를 완성할 수 있습니다. QUERY 함수를 마스터하면 복잡한 데이터 분석을 단 하나의 수식으로 자동화할 수 있어, 반복적인 수작업을 획기적으로 줄이고 실시간으로 업데이트되는 동적 대시보드를 구축할 수 있습니다.