BIG_DATA_SYSTEMS_ANALYSIS Telegram 84
NULL и агрегатные функции

И вновь разговоры про NULL. Особое внимание заслуживает работа с агрегатными функциями в выражениях, включающих NULL-значения.

NULL представляет собой отсутствие значения или неизвестное состояние, и поэтому добавляет сложности при взаимодействии с агрегатными функциями. Распространенной ошибкой является предположение, что NULL ведет себя как обычное значение. Но это не так!

Вернёмся к основам. Одним из фундаментальных аспектов SQL является трехзначная логика (3VL), различающая TRUE, FALSE и UNKNOWN. И при применении агрегатных функций к выражениям с NULL-значениями важно учитывать состояние UNKNOWN, которое вносит NULL. Ничего не понятно? 😁 Рассмотрим на конкретных примерах.

Предположим у нас есть таблица table_for_count:
column_1
49
60
NULL
12
50
11
NULL
5


select * from table_for_count

Результат: 8

select count(column_1) from table_for_count

Результат: 6 ☹️

В то время как COUNT(*) посчитает все строки, независимо от наличия значений NULL, COUNT(column_1) исключит в подсчёте строки, где указанный столбец равен NULL.

Аналогично, работают функции SUM, AVG, MAX и MIN. Я отдельно выделила AVG, чтобы вы обратили на него внимание.

table_for_avg:
column_2
1
NULL
2


select avg(column_2) from table_for_avg

Результат: 1.5 (в некоторых расчётах — это будет верным, но может быть и нет — учитывайте контекст запроса!)


Что делать?
Хорошая практика — использование функций COALESCE или NVL для замены NULL-значений на значения по умолчанию или определенные пользователем до применения агрегатной функции. Важно устанавливать значения осмысленно, иначе это внесёт ещё больше хаоса в результаты запроса.
Ещё один вариант — использование оператора CASE для создания условной логики и обработки NULL значений.
Выбор метода зависит от конкретной бизнес-задачи и, конечно же, СУБД (и не забывайте проверять план выполнения запроса для лучшего решения).

select count(coalesce(column_1, 0)) from table_for_count;

Результат: 8 😍

Отсутствие понимания взаимодействия агрегатных функций с выражениями, включающими NULL значения, может привести к появлению некачественной отчетности и интерпретации данных, что впоследствии подорвёт доверие ко всей аналитике. Поэтому будьте на чеку и учитывайте NULL-значения там, где это необходимо.

Другие заметки про работу с NULL-значениями можно найти по хэштегу 👇

#null
Please open Telegram to view this post
VIEW IN TELEGRAM
1



tgoop.com/big_data_systems_analysis/84
Create:
Last Update:

NULL и агрегатные функции

И вновь разговоры про NULL. Особое внимание заслуживает работа с агрегатными функциями в выражениях, включающих NULL-значения.

NULL представляет собой отсутствие значения или неизвестное состояние, и поэтому добавляет сложности при взаимодействии с агрегатными функциями. Распространенной ошибкой является предположение, что NULL ведет себя как обычное значение. Но это не так!

Вернёмся к основам. Одним из фундаментальных аспектов SQL является трехзначная логика (3VL), различающая TRUE, FALSE и UNKNOWN. И при применении агрегатных функций к выражениям с NULL-значениями важно учитывать состояние UNKNOWN, которое вносит NULL. Ничего не понятно? 😁 Рассмотрим на конкретных примерах.

Предположим у нас есть таблица table_for_count:

column_1
49
60
NULL
12
50
11
NULL
5


select * from table_for_count

Результат: 8

select count(column_1) from table_for_count

Результат: 6 ☹️

В то время как COUNT(*) посчитает все строки, независимо от наличия значений NULL, COUNT(column_1) исключит в подсчёте строки, где указанный столбец равен NULL.

Аналогично, работают функции SUM, AVG, MAX и MIN. Я отдельно выделила AVG, чтобы вы обратили на него внимание.

table_for_avg:
column_2
1
NULL
2


select avg(column_2) from table_for_avg

Результат: 1.5 (в некоторых расчётах — это будет верным, но может быть и нет — учитывайте контекст запроса!)


Что делать?
Хорошая практика — использование функций COALESCE или NVL для замены NULL-значений на значения по умолчанию или определенные пользователем до применения агрегатной функции. Важно устанавливать значения осмысленно, иначе это внесёт ещё больше хаоса в результаты запроса.
Ещё один вариант — использование оператора CASE для создания условной логики и обработки NULL значений.
Выбор метода зависит от конкретной бизнес-задачи и, конечно же, СУБД (и не забывайте проверять план выполнения запроса для лучшего решения).

select count(coalesce(column_1, 0)) from table_for_count;

Результат: 8 😍

Отсутствие понимания взаимодействия агрегатных функций с выражениями, включающими NULL значения, может привести к появлению некачественной отчетности и интерпретации данных, что впоследствии подорвёт доверие ко всей аналитике. Поэтому будьте на чеку и учитывайте NULL-значения там, где это необходимо.

Другие заметки про работу с NULL-значениями можно найти по хэштегу 👇

#null

BY В мире больших данных


Share with your friend now:
tgoop.com/big_data_systems_analysis/84

View MORE
Open in Telegram


Telegram News

Date: |

Joined by Telegram's representative in Brazil, Alan Campos, Perekopsky noted the platform was unable to cater to some of the TSE requests due to the company's operational setup. But Perekopsky added that these requests could be studied for future implementation. With the administration mulling over limiting access to doxxing groups, a prominent Telegram doxxing group apparently went on a "revenge spree." The group’s featured image is of a Pepe frog yelling, often referred to as the “REEEEEEE” meme. Pepe the Frog was created back in 2005 by Matt Furie and has since become an internet symbol for meme culture and “degen” culture. In the “Bear Market Screaming Therapy Group” on Telegram, members are only allowed to post voice notes of themselves screaming. Anything else will result in an instant ban from the group, which currently has about 75 members. Done! Now you’re the proud owner of a Telegram channel. The next step is to set up and customize your channel.
from us


Telegram В мире больших данных
FROM American