Блог
SQL
SQL для тех, кто знает Excel: 10 привычных действий и как они пишутся в SQL

SQL для тех, кто знает Excel: 10 привычных действий и как они пишутся в SQL

Если вы уверенно делаете сводные таблицы и ВПР, вы уже знаете половину SQL. Вы просто называете это по-другому. Фильтр, сортировка, «удалить дубликаты», СЧЁТЕСЛИ — у каждого действия в Excel есть точный аналог в SQL, и чаще всего он занимает одну-две строки.

Ниже 10 действий, которые делают в Excel каждый день, и их перевод на SQL. Под каждым — задача в тренажёре SQL Arena, где можно сразу попробовать самому в браузере, без установки программ.

Все примеры работают на одной маленькой «таблице заказов»:
  • orders — заказы: id, client_id (кто купил), order_date (дата), status (оплачен / отменён / новый), amount (сумма), product (товар);
  • clients — клиенты: id, name (имя), city (город).
В Excel это были бы два листа. В базе данных это две таблицы.

1. Фильтр → WHERE

В Excel: включить автофильтр, в столбце «Статус» оставить «оплачен», в столбце «Сумма» поставить «больше 1 000».

В SQL:
SELECT id, amount
FROM orders
WHERE status = 'оплачен' AND amount > 1000;
Каждое условие фильтра — кусочек после WHERE. Нужно «или» вместо «и» — пишете OR.

Попробовать: Доставленные заказы и Товары с двух складов — на «или».

2. Сортировка и «первые 3» → ORDER BY и LIMIT

В Excel: отсортировать по сумме от большего к меньшему и посмотреть на верхние строки.

В SQL:
SELECT id, amount
FROM orders
ORDER BY amount DESC
LIMIT 3;
DESC — по убыванию, без него — по возрастанию. LIMIT 3 оставляет три верхние строки.

Попробовать: Самые дорогие товары каталога.

3. Удалить дубликаты → DISTINCT

В Excel: «Данные → Удалить дубликаты», чтобы получить список городов без повторов.

В SQL:
SELECT DISTINCT city
FROM clients;
Разница приятная: исходная таблица остаётся целой, вы просто смотрите на неё без повторов.

Попробовать: Уникальные пары «категория — поставщик».

4. Сводная таблица → GROUP BY

В Excel: сводная таблица, в строки — клиент, в значения — количество заказов и сумма.

В SQL:
SELECT client_id,
       COUNT(*)    AS orders_cnt,
       SUM(amount) AS total
FROM orders
GROUP BY client_id;
Результат:
client_idorders_cnttotal
121 500
226 050
3215 800
GROUP BY — это «строки» сводной, COUNT и SUM — «значения». Вместо SUM можно поставить AVG (среднее), MIN или MAX.

Попробовать: Сколько заказов у каждого покупателя.
Потренируйтесь на задачах
В SQL Arena больше тысячи задач с автопроверкой на настоящих таблицах: от первого SELECT до оконных функций и задач с собеседований. Задачи уровня Easy бесплатны, регистрация без карты.
Открыть SQL Arena

5. СЧЁТЕСЛИ и СУММЕСЛИ → COUNT и SUM с условием

В Excel: =СЧЁТЕСЛИ(C:C; "оплачен") и =СУММЕСЛИ(C:C; "оплачен"; E:E) для каждого клиента.

В SQL (PostgreSQL):
SELECT client_id,
       COUNT(*)    FILTER (WHERE status = 'оплачен') AS paid_cnt,
       SUM(amount) FILTER (WHERE status = 'оплачен') AS paid_sum
FROM orders
GROUP BY client_id;
В одной таблице получаются и все заказы, и только оплаченные — рядом, в соседних столбцах. В других базах то же самое пишут через SUM(CASE WHEN … THEN 1 ELSE 0 END), а в BigQuery есть функция COUNTIF — почти как в Excel.

Попробовать: Оплаченные события по городам и Какая платформа лучше конвертирует — там нужно посчитать долю.

6. ВПР → JOIN

В Excel: на листе заказов есть только номер клиента, а имя и город лежат на другом листе. Пишете ВПР и протягиваете вниз.

В SQL:
SELECT o.id, o.amount, c.name, c.city
FROM orders o
LEFT JOIN clients c ON c.id = o.client_id;
ON — это «по какому столбцу искать», как первый аргумент ВПР. LEFT JOIN оставляет все заказы, даже если клиента не нашлось: на его месте будет пусто, как #Н/Д в Excel. Ещё одно отличие в пользу SQL: подтянуть можно сразу сколько угодно столбцов, а не по одной формуле на каждый.

Попробовать: Заказы российских клиентов — страна клиента лежит в другой таблице.

7. ЕСЛИ → CASE

В Excel: =ЕСЛИ(E2>=5000; "крупный"; ЕСЛИ(E2>=1000; "средний"; "мелкий")) — и скобки, в которых легко запутаться.

В SQL:
SELECT id, amount,
       CASE
         WHEN amount >= 5000 THEN 'крупный'
         WHEN amount >= 1000 THEN 'средний'
         ELSE 'мелкий'
       END AS size
FROM orders;
Вложенных скобок нет: условия идут списком сверху вниз, срабатывает первое подходящее.

Попробовать: Витрина «Котомаркета»: ценовые категории и топ-5. А если CASE уже знаете — Категория цены без CASE и IF, задача в стиле Яндекс Практикума.

8. Фильтр по итогам сводной → HAVING

В Excel: построили сводную по клиентам, а потом в ней оставили только тех, у кого сумма больше 5 000.

В SQL:
SELECT client_id, SUM(amount) AS total
FROM orders
WHERE status = 'оплачен'
GROUP BY client_id
HAVING SUM(amount) > 5000;
Здесь два фильтра, и это частый вопрос на собеседованиях. WHERE отбирает строки до подсчёта (берём только оплаченные заказы). HAVING отбирает уже готовые итоги (оставляем клиентов с суммой больше 5 000).

Попробовать: Клиенты банка с балансом выше 10 000.

9. Итоги по месяцам → date_trunc

В Excel: добавить столбец =ТЕКСТ(B2;"ММ.ГГГГ"), потом сводная по этому столбцу. Или группировка дат в сводной.

В SQL (PostgreSQL):
SELECT date_trunc('month', order_date)::date AS month,
       SUM(amount) AS revenue
FROM orders
WHERE status = 'оплачен'
GROUP BY 1
ORDER BY 1;
Результат:
monthrevenue
2026-01-011 200
2026-02-016 200
2026-03-0115 000
date_trunc «обрезает» дату до первого числа месяца, и все заказы одного месяца попадают в одну строку. Вспомогательный столбец не нужен.

Попробовать: Пульс продаж по месяцам.

10. СЖПРОБЕЛЫ, СТРОЧН и ПРОПНАЧ → trim, lower и initcap

В Excel: товар записан то как «ИГРУШКА», то как «игрушка», то с пробелами по краям. Чистите формулой =СТРОЧН(СЖПРОБЕЛЫ(F2)).

В SQL:
SELECT DISTINCT lower(trim(product)) AS product
FROM orders;
Было шесть строк с разным написанием, осталось четыре настоящих товара: «корм для кошек», «игрушка», «когтеточка», «домик». Аналог ПРОПНАЧ тоже есть — initcap: из « корм ДЛЯ кошек » получится «Корм Для Кошек», с заглавной буквы каждое слово, ровно как в Excel.

Попробовать: Меню без крика и шёпота.

Шпаргалка

В ExcelВ SQL
АвтофильтрWHERE
СортировкаORDER BY
Верхние N строкLIMIT
Удалить дубликатыDISTINCT
Сводная таблицаGROUP BY + COUNT / SUM / AVG
СЧЁТЕСЛИ, СУММЕСЛИCOUNT / SUM с FILTER или CASE
ВПРJOIN
ЕСЛИCASE
Фильтр в своднойHAVING
Группировка по месяцамdate_trunc
СЖПРОБЕЛЫ, СТРОЧН, ПРОПНАЧtrim, lower, initcap

Зачем это всё, если есть Excel

Excel начинает тормозить на сотнях тысяч строк, а рабочие данные в компаниях давно лежат в базах. Поэтому SQL спрашивают почти на всех собеседованиях аналитиков, а всё чаще — у тестировщиков, маркетологов и продуктовых менеджеров. Хорошая новость из этой статьи: учить его с нуля не придётся, логику вы уже знаете из Excel. Осталось набить руку.

Все задачи из статьи — в SQL Arena: пишете запрос прямо в браузере, тренажёр сразу проверяет ответ. Больше тысячи задач, начальные можно решать бесплатно.
Потренируйтесь на задачах
В SQL Arena больше тысячи задач с автопроверкой на настоящих таблицах: от первого SELECT до оконных функций и задач с собеседований. Задачи уровня Easy бесплатны, регистрация без карты.
Открыть SQL Arena
Курс «Инженер по ручному тестированию»
Учим с нуля до трудоустройства: персональный ментор, задания в Jira, подготовка к собеседованиям и поддержка на испытательном сроке.
Узнать о курсе
По всем вопросам:
Quality Academy
Используя данный сайт, вы даёте согласие на использование файлов cookie.
ОК, ЗАКРЫТЬ