| Курс профессиональной Power BI аналитики | |
| Курс SQL-анализа данных с нуля |
Файлы к уроку:
В этом уроке вам понадобятся таблицы religion и bike_sales, которые были созданы в предыдущих уроках курса.
Значение NULL
Если в функцию COUNT передать столбец, то вернется количество не NULL значений.
-- Посчитать все не null значения
select count(metro_station)
from religion
Если в функцию COUNT передать всю таблицу, то вернется количество строк.
-- Посчитать все строки даже если в каких-то столбцах находится null
-- И даже если все значения в строке - это null
select count(*)
from religion
Добавим строку, которая полностью будет состоять из NULL. После INSERT еще раз посчитайте количество строк.
-- Добавим строку, в которой все значения null
insert into religion
values (null, null, null, null, null, null, null, null, null, null, null)
Теперь удалим созданную строку. Убедились, что COUNT учитывает даже полностью NULL строки. Теперь строка нам больше не нужна.
-- Удалим созданную полностью null строку
delete from religion
where id is null
С помощью IS NULL можно посчитать количество NULL.
-- Посчитать строки, где metro_station is null
select count(*)
from religion
where metro_station is null
С помощью IS NOT NULL можно посчитать количество не NULL.
-- Посчитать строки, где metro_station is not null
select count(*)
from religion
where metro_station is not null
Запрос к таблице из другой схемы
На панели инструментов мы всегда можем увидеть с каком схемой в данный момент работаем.

Это не значит, что мы можем выполнять запросы только к этой схеме. Просто к таблицам этой схемы можно обращаться без указания схемы. Если нужно сделать запрос к сущности из другой схемы, то перед именем таблицы указывается схема, в которой она находится.
-- Запрос к другой схеме
select *
from bikes.bike_sales
Применимость агрегатных функций к разным типам данных
Функции MIN, MAX, COUNT, SUM применимы к значениям с числовыми типами данных. Это очевидно.
-- Агрегация MIN, MAX, COUNT, SUM для числа
select
min(profit) as minimum
,max(profit) as maximum
,count(profit) as cnt
,sum(profit) as summa
from bikes.bike_sales
К дате можно применить MIN, MAX, COUNT.
select
min(order_date) as minimum
,max(order_date) as maximum
,count(order_date) as cnt
--,sum(order_date) as summa
from bikes.bike_sales
К тексту применимы MIN, MAX, COUNT. Если отсортировать значения по алфавиту, то первое из них будет минимальным, а последнее максимальным.
select
min(order_month) as minimum
,max(order_month) as maximum
,count(order_month) as cnt
--,sum(order_month) as summa
from bikes.bike_sales
Рекомендации по форматированию кода
- При перечислении полей запятая ставится вначале строки, а не в конце
- Логические блоки нужно обозначать отступами
- После WHERE пишется 1 = 1
- Функции, ключевые слова вводятся большими буквами
-- Рекомендации по форматированию кода
SELECT
product_category
,product_subcategory
,SUM(revenue) AS revenue
,SUM(cost) AS cost
,SUM(profit) AS profit
FROM bikes.bike_sales
WHERE 1 = 1
AND order_year = 2015
AND customer_country IN ('United States', 'Canada')
GROUP BY
product_category
,product_subcategory
HAVING SUM(profit) >= 30000
ORDER BY profit DESC
Ошибки в коде
Если неправильно ввести имя столбца, то вернется ошибка 42703. В описании ошибки также можно увидеть строку, в которой она находится и позицию. Позиция считается с начала выделения. В примере выделение начинается со слова SELECT. Буква «S» находится на первой позиции.

По такому же принципу выявляются и исправляются другие ошибки, например:
- Пропущена запятая
- Использовано неверное ключевое слово, например, FOR вместо FROM
Порядок выполнения операций
Операции выполняются не в том порядке, в котором они написаны. Разберем на примере предыдущего запроса.
- FROM
- WHERE
- GROUP BY
- HAVING
- SELECT
- ORDER BY
SQL Базовый
| Номер урока | Урок | Описание |
|---|---|---|
| 1 | SQL Базовый №1. Установка PostgreSQL, создание таблицы, импорт из CSV | Начинаем изучать SQL. Установим СУБД, создадим схему, таблицу и выполним импорт из CSV. |
| 1.1 | SQL Базовый №1.1. UI создание схемы, таблицы, импорт из CSV | Дополнение к уроку 1. Создадим схему, таблицу и выполним импорт данных из CSV с помощью пользовательского интерфейса. |
| 2 | SQL Базовый №2. Простые операции, SELECT | Научимся отбирать нужные нам столбцы и строки таблицы и делать сортировку. |
| 3 | SQL Базовый №3. Типы данных | Знакомство с основными типами данных в PostgreSQL: строковые, числовые, дата и время. |
| 4 | SQL Базовый №4. Импорт и экспорт данных | Научимся импортировать данные из CSV и экспортировать в CSV. |
| 5 | SQL Базовый №5. Группировка | Изучаем операцию группировки и основные агрегатные функции. |
| 6 | SQL Базовый №6. Математические операции | Сложение, вычитание, умножение, деление, остаток от деления, факториал, возведение в степень, корень. |
| 7 | SQL Базовый №7. CASE | CASE — это условный оператор, который позволяет осуществлять проверку и возвращать результат, который зависит от того, какое условие выполнено. |
| 8 | SQL Базовый №8. Дополнения к урокам 1-7 | Значение NULL, запросы к таблицам из других схем, рекомендации по форматированию кода, порядок выполнения операций в SQL. |
| 9 | SQL Базовый №9. Повторение изученного | Повторим все, что изучили в уроках 1-8. Спонсоры также смогут получить домашнее задание. |
| 10 | SQL Базовый №10. Подзапросы | Подзапросы нужны, когда для решения задачи нужно сделать несколько действий. Подзапросы внутри WHERE, FROM, SELECT, HAVING. |
| 11 | SQL Базовый №11. CTE | CTE также используются для решения задач в несколько этапов. |
| 12 | SQL Базовый №12. Оконные функции. Ранг, ранжирование (ranking) | Как посчитать ранг для всей таблицы или для конкретной категории. |
| 13 | SQL Базовый №13. Оконные функции. Агрегаты (SUM, AVG, MIN, MAX, COUNT) | Получить агрегированную итоговую сумму для категории. |
| 14 | SQL Базовый №14. Смещение | Приемы из этого урока позволяют получить значение из другой строки таблицы. |
| 15 | SQL Базовый №15. Оконные функции. Скользящие агрегаты | Научимся вычислять скользящее среднее и нарастающий итог. |
| 16 | SQL Базовый №16. Операция JOIN | Какие бывают виды объединения по горизонтали. Чем они отличаются друг от друга. Практика и домашнее задание. |
| 17 | SQL Базовый №17. Практика | Повторим все изученное в предыдущих уроках. Создадим схему, несколько таблиц и выполним несколько запросов на закрепление изученного материала. |
| 18 | SQL Базовый №18. Объединение по вертикали (UNION, UNION ALL, INTERSECT, EXCEPT) | Научимся объединять таблицы по вертикали. |
| 19 | SQL Базовый №19. Устройство на работу 1 | Тестовые задания при приеме на работу. |
| 20 | SQL Базовый №20. Сравнение с Excel, важные функции DBeaver | Важные функции DBeaver. Сравниваем SQL и Excel. |
| 21 | SQL Базовый №21. Устройство на работу 2 | Решим еще один тест при устройстве на работу. |
| 22 | SQL Базовый №22. Краткий обзор основных DDL и DML команд | Познакомимся с командами, которые позволяют создавать таблицы, наполнять их данными, редактировать, удалять и т. д. |
| 23 | SQL Базовый №23. Устройство на работу 3 | Еще одно тестовое задание по SQL при приеме на работу на позицию BI-аналитика. |