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

구글 시트 QUERY 함수로 데이터베이스처럼 활용하기: SQL 문법으로 데이터 분석 마스터하기

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

구글 시트는 단순한 스프레드시트를 넘어 강력한 데이터베이스 도구로 활용할 수 있습니다. 특히 QUERY 함수를 사용하면 SQL과 유사한 문법으로 복잡한 데이터 조회와 분석이 가능해집니다. 수천 개의 데이터 행에서 원하는 정보만 정확하게 추출하고, 조건에 맞게 정렬하며, 그룹별로 집계하는 작업을 단 하나의 함수로 처리할 수 있습니다. 이 글에서는 기본 SELECT 문법부터 WHERE 조건절 활용법, 그리고 GROUP BY와 집계 함수를 결합한 고급 쿼리 작성 방법까지 상세히 다룹니다. 실무에서 바로 사용할 수 있는 다양한 예제와 함께 구글 시트를 전문가 수준의 데이터 분석 도구로 변모시키는 방법을 소개합니다.


SELECT와 WHERE로 원하는 데이터만 정확하게 추출하기

QUERY 함수의 가장 기본이 되는 것은 SELECT와 WHERE 절입니다. SELECT는 어떤 열을 가져올지 지정하고, WHERE는 어떤 조건에 맞는 행만 필터링할지 결정합니다. 기본 문법은 '=QUERY(데이터범위, "SELECT 열 WHERE 조건")' 형태로 작성됩니다. 예를 들어 A열부터 D열까지 데이터가 있고 B열의 값이 특정 조건을 만족하는 행만 가져오고 싶다면 'SELECT A, B, C WHERE B > 1000'과 같이 작성합니다. 열은 알파벳으로 지정할 수도 있고, Col1, Col2처럼 번호로 지정할 수도 있습니다. WHERE 절에서는 다양한 비교 연산자를 사용할 수 있는데, 등호(=), 부등호(>, <, >=, <=), 그리고 NOT EQUAL(<>)까지 지원됩니다. 문자열을 비교할 때는 작은따옴표로 감싸야 하며, 'WHERE C = "서울"'처럼 작성합니다. 여러 조건을 결합할 때는 AND와 OR 연산자를 사용합니다. 'WHERE B > 1000 AND C = "서울"'처럼 두 조건을 모두 만족하는 데이터만 추출하거나, 'WHERE C = "서울" OR C = "부산"'처럼 둘 중 하나를 만족하는 데이터를 가져올 수 있습니다. LIKE 연산자를 사용하면 부분 일치 검색도 가능한데, 'WHERE D LIKE "%마케팅%"'는 D열에 '마케팅'이라는 단어가 포함된 모든 행을 찾습니다. CONTAINS 함수도 유사한 기능을 제공하며, 'WHERE CONTAINS(D, "마케팅")'처럼 사용합니다. 날짜 비교도 가능한데, DATE 함수와 결합하여 'WHERE A > DATE "2024-01-01"'처럼 특정 날짜 이후의 데이터만 필터링할 수 있습니다. NULL 값을 처리할 때는 IS NULL 또는 IS NOT NULL을 사용하며, 'WHERE B IS NOT NULL'은 B열에 값이 있는 행만 가져옵니다. ORDER BY 절을 추가하면 결과를 정렬할 수 있는데, 'SELECT A, B, C WHERE B > 1000 ORDER BY B DESC'는 B열 값이 1000보다 큰 행을 B열 기준 내림차순으로 정렬합니다. LIMIT 절로 결과 개수를 제한할 수도 있어, 상위 10개만 보고 싶다면 마지막에 'LIMIT 10'을 추가하면 됩니다.


GROUP BY와 집계 함수로 데이터 요약 분석하는 방법

데이터 분석에서 가장 강력한 기능 중 하나는 그룹별로 데이터를 집계하는 것입니다. QUERY 함수의 GROUP BY 절을 사용하면 특정 기준으로 데이터를 묶어서 합계, 평균, 개수 등을 계산할 수 있습니다. 기본 문법은 'SELECT 그룹열, 집계함수(열) GROUP BY 그룹열'입니다. 예를 들어 부서별 매출 합계를 구하려면 'SELECT A, SUM(B) GROUP BY A'처럼 작성합니다. 여기서 A는 부서명이 있는 열이고, B는 매출 금액이 있는 열입니다. 결과는 각 부서별로 하나의 행으로 표시되며, 해당 부서의 총 매출액이 계산됩니다. 사용 가능한 집계 함수는 다양합니다. SUM은 합계, AVG는 평균, COUNT는 개수, MIN은 최솟값, MAX는 최댓값을 계산합니다. 'SELECT A, COUNT(B), AVG(C), MAX(D) GROUP BY A'처럼 하나의 쿼리에서 여러 집계 함수를 동시에 사용할 수도 있습니다. 이렇게 하면 부서별로 거래 건수, 평균 금액, 최대 금액을 한 번에 볼 수 있습니다. 여러 열을 기준으로 그룹화하는 것도 가능한데, 'SELECT A, B, SUM(C) GROUP BY A, B'는 A열과 B열의 조합별로 그룹을 만들어 집계합니다. 예를 들어 지역과 제품 카테고리별 매출을 동시에 분석할 때 유용합니다. HAVING 절을 사용하면 집계 결과에 조건을 적용할 수 있습니다. WHERE는 그룹화 전 데이터를 필터링하지만, HAVING은 그룹화 후 집계 결과를 필터링합니다. 'SELECT A, SUM(B) GROUP BY A HAVING SUM(B) > 10000'은 총 매출이 10000을 초과하는 부서만 표시합니다. LABEL 절을 추가하면 결과 열의 이름을 변경할 수 있어 가독성을 높일 수 있습니다. 'SELECT A, SUM(B) GROUP BY A LABEL A "부서명", SUM(B) "총매출"'처럼 작성하면 헤더가 한글로 표시됩니다. FORMAT 절을 사용하면 숫자나 날짜의 표시 형식을 지정할 수 있는데, 'FORMAT SUM(B) "#,##0"'은 천 단위 구분 기호를 추가합니다. PIVOT 절을 활용하면 크로스탭 형태의 피벗 테이블을 만들 수도 있습니다.


실전 활용 사례와 고급 쿼리 테크닉

구글 시트 QUERY 함수로 데이터베이스처럼 활용하기 위한 실전 사례를 살펴보겠습니다. 먼저 매출 데이터 분석 시나리오입니다. 날짜, 지역, 제품, 수량, 금액이 포함된 원본 데이터에서 이번 달 서울 지역의 제품별 매출 상위 5개를 조회하려면 복잡한 쿼리가 필요합니다. 'SELECT C, SUM(E) WHERE A >= DATE "2024-10-01" AND B = "서울" GROUP BY C ORDER BY SUM(E) DESC LIMIT 5 LABEL C "제품명", SUM(E) "총매출액"'처럼 작성할 수 있습니다. 이 쿼리는 날짜 필터링, 지역 필터링, 그룹 집계, 정렬, 개수 제한, 레이블 지정을 모두 포함합니다. 다음으로 재고 관리 사례입니다. 재고량이 안전 재고 수준 이하인 제품을 찾고, 재고 금액 기준으로 정렬하려면 'SELECT A, B, C WHERE C < D ORDER BY B*C DESC LABEL A "제품코드", B "단가", C "재고량"'처럼 계산식을 포함한 쿼리를 작성합니다. 여기서 B*C는 재고 금액을 의미하며, 쿼리 내에서 직접 계산이 가능합니다. 직원 데이터 관리에서는 부서별 평균 근속연수와 직원 수를 동시에 분석할 수 있습니다. 'SELECT A, COUNT(B), AVG(YEAR(TODAY())-YEAR(C)) GROUP BY A HAVING COUNT(B) > 5 LABEL A "부서", COUNT(B) "인원", AVG(YEAR(TODAY())-YEAR(C)) "평균근속년수"'처럼 날짜 함수를 결합하여 복잡한 계산도 수행합니다. 여러 시트의 데이터를 결합할 때는 범위를 명확히 지정해야 하는데, 'QUERY({시트1!A:D;시트2!A:D}, "SELECT Col1, SUM(Col4) GROUP BY Col1")'처럼 중괄호와 세미콜론으로 데이터를 세로로 연결할 수 있습니다. 동적 쿼리를 만들 때는 셀 참조와 문자열 연결을 활용합니다. '=QUERY(A:D, "SELECT A, B WHERE C = """&E1&"""")' 형태로 E1 셀의 값을 쿼리 조건에 포함시킬 수 있습니다. 큰따옴표를 세 개 연속으로 쓰는 것은 문자열 내부에 큰따옴표를 표현하기 위한 이스케이프 처리입니다. 성능 최적화를 위해서는 데이터 범위를 최소화하고, 불필요한 열은 SELECT 하지 않으며, 인덱스 역할을 하는 열을 WHERE 조건에 우선 사용하는 것이 좋습니다. 오류 처리를 위해 IFERROR 함수와 결합하여 'IFERROR(QUERY(...), "데이터 없음")'처럼 사용하면 쿼리 결과가 없을 때 사용자 친화적인 메시지를 표시할 수 있습니다.