Comments 5
Если выполнить первый запрос(закомментированный), то получим довольно странное значение — 0 записей у которых не указана каюта. Это связано с особенностями работы агрегирующих функций. Не умеет правильно складывать пустые значения.
На самом деле это фича, а не баг! Если вам нужно посчитать кол-во записей, используйте count(*). count(значение) считает именно количество значений, а null — отсутствие значения, его считать не надо. Эту особенность удобно использовать, если вам надо посчитать сущности с определенными свойствами, при этом не нужно ограничивать всю выборку в блоке where, так как это повлияет на выборку сущностей с другими свойствами:
select
count(*) as TOTAL,
count(case when sex = 'male' then 1 else null end) as MALE_TOTAL,
count(case when sex = 'female' then 1 else null end) as FEMALE_TOTAL,
count(case when sex = 'male' and age>=60 then 1 else null end) as OLD_MALE_TOTAL,
count(case when sex = 'female' and age>=60 then 1 else null end) as OLD_FEMALE_TOTAL,
count(case when age<=16 then 1 else null end) as CHILDREN_TOTAL
from titanik_test_1
0
Да, это та еще фича. Немало приятных моментов при отладке доставили null values.
На счет count(*) — думал, но решил что лучше передать маленькое не nullable поле, целочисленное вместо *. Думаю с запасом на большие таблицы — * на миллионах будет помедленнее.
На счет count(*) — думал, но решил что лучше передать маленькое не nullable поле, целочисленное вместо *. Думаю с запасом на большие таблицы — * на миллионах будет помедленнее.
0
там в титанике какой то чел с первого сабмита вышел на первое место с 0.96651, ваще мощь -)
0
Sign up to leave a comment.
Data Mining: Первичная обработка данных при помощи СУБД. Часть 2