Если вы уверенно делаете сводные таблицы и ВПР, вы уже знаете половину SQL. Вы просто называете это по-другому. Фильтр, сортировка, «удалить дубликаты», СЧЁТЕСЛИ — у каждого действия в Excel есть точный аналог в SQL, и чаще всего он занимает одну-две строки.
Ниже 10 действий, которые делают в Excel каждый день, и их перевод на SQL. Под каждым — задача в тренажёре SQL Arena, где можно сразу попробовать самому в браузере, без установки программ.
Все примеры работают на одной маленькой «таблице заказов»:
Ниже 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:
В SQL:
SELECT id, amount
FROM orders
WHERE status = 'оплачен' AND amount > 1000;Каждое условие фильтра — кусочек после WHERE. Нужно «или» вместо «и» — пишете OR.
Попробовать: Доставленные заказы и Товары с двух складов — на «или».
Попробовать: Доставленные заказы и Товары с двух складов — на «или».
2. Сортировка и «первые 3» → ORDER BY и LIMIT
В Excel: отсортировать по сумме от большего к меньшему и посмотреть на верхние строки.
В SQL:
В SQL:
SELECT id, amount
FROM orders
ORDER BY amount DESC
LIMIT 3;DESC — по убыванию, без него — по возрастанию. LIMIT 3 оставляет три верхние строки.
Попробовать: Самые дорогие товары каталога.
Попробовать: Самые дорогие товары каталога.
3. Удалить дубликаты → DISTINCT
В Excel: «Данные → Удалить дубликаты», чтобы получить список городов без повторов.
В SQL:
В SQL:
SELECT DISTINCT city
FROM clients;Разница приятная: исходная таблица остаётся целой, вы просто смотрите на неё без повторов.
Попробовать: Уникальные пары «категория — поставщик».
Попробовать: Уникальные пары «категория — поставщик».
4. Сводная таблица → GROUP BY
В Excel: сводная таблица, в строки — клиент, в значения — количество заказов и сумма.
В SQL:
В SQL:
SELECT client_id,
COUNT(*) AS orders_cnt,
SUM(amount) AS total
FROM orders
GROUP BY client_id;Результат:
| client_id | orders_cnt | total |
|---|---|---|
| 1 | 2 | 1 500 |
| 2 | 2 | 6 050 |
| 3 | 2 | 15 800 |
GROUP BY — это «строки» сводной, COUNT и SUM — «значения». Вместо SUM можно поставить AVG (среднее), MIN или MAX.
Попробовать: Сколько заказов у каждого покупателя.
Попробовать: Сколько заказов у каждого покупателя.
Потренируйтесь на задачах
В SQL Arena больше тысячи задач с автопроверкой на настоящих таблицах: от первого SELECT до оконных функций и задач с собеседований. Задачи уровня Easy бесплатны, регистрация без карты.
Открыть SQL Arena5. СЧЁТЕСЛИ и СУММЕСЛИ → COUNT и SUM с условием
В Excel:
В SQL (PostgreSQL):
=СЧЁТЕСЛИ(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:
В 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:
В SQL:
=ЕСЛИ(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, задача в стиле Яндекс Практикума.
Попробовать: Витрина «Котомаркета»: ценовые категории и топ-5. А если CASE уже знаете — Категория цены без CASE и IF, задача в стиле Яндекс Практикума.
8. Фильтр по итогам сводной → HAVING
В Excel: построили сводную по клиентам, а потом в ней оставили только тех, у кого сумма больше 5 000.
В SQL:
В 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.
Попробовать: Клиенты банка с балансом выше 10 000.
9. Итоги по месяцам → date_trunc
В Excel: добавить столбец
В SQL (PostgreSQL):
=ТЕКСТ(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;Результат:
| month | revenue |
|---|---|
| 2026-01-01 | 1 200 |
| 2026-02-01 | 6 200 |
| 2026-03-01 | 15 000 |
date_trunc «обрезает» дату до первого числа месяца, и все заказы одного месяца попадают в одну строку. Вспомогательный столбец не нужен.
Попробовать: Пульс продаж по месяцам.
Попробовать: Пульс продаж по месяцам.
10. СЖПРОБЕЛЫ, СТРОЧН и ПРОПНАЧ → trim, lower и initcap
В Excel: товар записан то как «ИГРУШКА», то как «игрушка», то с пробелами по краям. Чистите формулой
В SQL:
=СТРОЧН(СЖПРОБЕЛЫ(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: пишете запрос прямо в браузере, тренажёр сразу проверяет ответ. Больше тысячи задач, начальные можно решать бесплатно.
Потренируйтесь на задачах
В SQL Arena больше тысячи задач с автопроверкой на настоящих таблицах: от первого SELECT до оконных функций и задач с собеседований. Задачи уровня Easy бесплатны, регистрация без карты.
Открыть SQL ArenaКурс «Инженер по ручному тестированию»
Учим с нуля до трудоустройства: персональный ментор, задания в Jira, подготовка к собеседованиям и поддержка на испытательном сроке.
Узнать о курсеQuality Academy — школа тестировщиков
