Функция QUERY в Google Таблицах: анализ данных как в SQL
Продвинутое4 минРедакция Innovialabs
Коротко
QUERY выполняет SQL-подобный запрос к диапазону — фильтрует, группирует, сортирует и переименовывает столбцы одной формулой, а в связке с IMPORTRANGE строит отчёты, которые обновляются вслед за исходной таблицей.
Короткий ответ
QUERY — функция Google Таблиц, которая принимает диапазон и текст запроса на языке, похожем на SQL:
=QUERY(данные; "запрос"; [заголовки])
- данные — диапазон, например
Заказы!A:F; - запрос — строка в кавычках;
- заголовки — сколько верхних строк считать заголовками; лучше всегда указывать явно, обычно
1.
Части запроса пишутся строго в таком порядке: select, where, group by, pivot, order by, limit, offset, label, format. Любую часть можно пропустить, но нельзя переставить.
В русской локали аргументы функции разделяются точкой с запятой, а сам запрос всегда пишется английскими ключевыми словами.
Как ссылаться на столбцы
- Если данные — обычный диапазон, столбцы обозначаются буквами:
A,B,C, заглавными. - Если данные — результат другой функции (IMPORTRANGE, массив в фигурных скобках), используются Col1, Col2, Col3 — с заглавной C.
- Текстовые значения в запросе берутся в одинарные кавычки:
'Ташкент'.
Пример данных — лист «Заказы»: A — дата, B — менеджер, C — город, D — товар, E — сумма, F — статус.
select и where
=QUERY(Заказы!A:F; "select A, B, E where F = 'Оплачен' and E > 100000"; 1)
Операторы в where:
- сравнение:
=,!=,<>,>,<,>=,<=; - логика:
and,or,not; - пустые значения:
is null,is not null; - текст:
contains,starts with,ends with,like(знаки%и_),matches(регулярное выражение).
Сравнение текста в QUERY учитывает регистр: 'ташкент' и 'Ташкент' — разные значения. Если данные заполнены вразнобой, используйте lower(C) = 'ташкент'.
Значение условия можно взять из ячейки, склеив строку:
=QUERY(Заказы!A:F; "select A, B, E where C = '"&H1&"'"; 1)
group by и агрегаты
Выручка и количество заказов по менеджерам:
=QUERY(Заказы!A:F; "select B, sum(E), count(A) where F = 'Оплачен' group by B order by sum(E) desc"; 1)
- Агрегатные функции:
sum,count,avg,min,max. - Правило: каждый столбец в
selectбез агрегатной функции должен быть указан вgroup by.
pivot
pivot превращает значения столбца в заголовки — получается сводная таблица одной формулой:
=QUERY(Заказы!A:F; "select B, sum(E) where F = 'Оплачен' group by B pivot C"; 1)
Строки — менеджеры, столбцы — города, на пересечении — выручка.
order by, limit, label, format
=QUERY(Заказы!A:F; "select B, sum(E) group by B order by sum(E) desc limit 10 label B 'Менеджер', sum(E) 'Выручка' format sum(E) '#,##0'"; 1)
order by ... desc— сортировка по убыванию;limit 10— первые 10 строк, удобно для рейтингов;label— понятные заголовки вместо «sum Сумма»;format— числовой формат результата.
Работа с датами
Дата в запросе пишется как литерал date 'ГГГГ-ММ-ДД':
=QUERY(Заказы!A:F; "select B, sum(E) where A >= date '2025-03-01' and A < date '2025-04-01' group by B"; 1)
Чтобы брать дату из ячейки H1, переведите её в нужный формат через TEXT:
=QUERY(Заказы!A:F; "select B, sum(E) where A >= date '"&TEXT(H1;"yyyy-mm-dd")&"' group by B"; 1)
Функции year(A) и month(A) позволяют группировать по периодам. Важная деталь: month() нумерует месяцы с нуля, январь — это 0. Учитывайте это в подписях или храните номер месяца во вспомогательном столбце.
QUERY + IMPORTRANGE: живой отчёт
Отчёт в отдельном файле, который читает данные из рабочей таблицы:
=QUERY(IMPORTRANGE("ссылка_на_таблицу"; "Заказы!A:F"); "select Col2, sum(Col5) where Col6 = 'Оплачен' group by Col2 label sum(Col5) 'Выручка'"; 1)
- После IMPORTRANGE столбцы называются Col1, Col2…, а не буквами.
- В первый раз дайте доступ: вставьте IMPORTRANGE отдельно в пустую ячейку и нажмите «Открыть доступ». После этого можно использовать её внутри QUERY.
- Отчёт обновляется вслед за исходной таблицей, но не мгновенно — с небольшой задержкой.
Частые ошибки
- Смешанные типы в столбце. QUERY определяет тип столбца по большинству значений, остальные превращает в пустые. Если в столбце сумм есть текст, часть строк молча пропадёт.
- Не указан аргумент заголовков. QUERY угадывает сам и иногда склеивает первые строки данных с заголовком.
- Буквы вместо ColN после IMPORTRANGE и наоборот.
- Неверный порядок частей запроса — например,
order byпередgroup by. - Вставка столбцов в источник сдвигает буквы, и отчёт начинает считать не те данные. Новые столбцы добавляйте в конец.