Файлы к уроку:
В этом уроке вам понадобятся таблицы 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