- 1
CASE WHEN ((b.k_vts_pre = null) OR (b.k_vts_goz_pre = null) OR (b.k_vts_relative_pre = null)) THEN null ELSE (b.k_vts_pre + b.k_vts_goz_pre + b.k_vts_relative_pre)/3 END
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−155
CASE WHEN ((b.k_vts_pre = null) OR (b.k_vts_goz_pre = null) OR (b.k_vts_relative_pre = null)) THEN null ELSE (b.k_vts_pre + b.k_vts_goz_pre + b.k_vts_relative_pre)/3 END
Один наш сотрудник проявил старание, достойное лучшего применения. В PostgreSQL можно так сравнивать с NULL, если настройка transform_null_equals=on. Но, во-первых, она у нас, как и по умолчанию, off, а во-вторых, зачем вообще?
Закат солнца руками :) Видимо автор не знал, что нулл отравляет почти все выражения, в которые он входит.
Сотрудник бОльшую часть времени работает с императивным языком, верно?
Вы так говорите, как-будто в императивных языках такие гигантские одностроки это что-то хорошее ;)
В отличие от мускуля, в постгресе вся эта срань причудливость хотя бы по дефолту отключена...
Хотя я, на их месте, вообще не стал бы запиливать эту фичу. is null и is not null вполне достаточно.
у нас тут давеча где-то пол года назад была история с оракаклом. куче крутых бородатых дядек и матёрых теток, которые 10+ лет исключительно оракл хакают, понадобилось пара месяцев что бы "увидеть" написаный новичком `= null` вместо `is null`. но зато потом как рассмотрели, ржали ходили пол дня, остановится не могли. потому что важный баг, а кода кот наплакал и его весь почти все уже наизусть выучили. но все равно тормозили 2 месяца.
если даже ДБ девелоперы тормозят, которые ничего кроме (PL/)SQL не видят, то это хороший индикатор что это говно, а не фича. в конце концов, а зачем еще может быть нужно сравнение с магичской константой нулл?
или теперь будет да?
но так как правило джоины все равно идут по индексам, то там уже почти всегда прописан not null в любом слючае. практической проблемы не вижу.
или в чем вопрос/подкол?
select * from table where col1 <= 10
a = null это не false. Это, емнип, ахуйбыегознал, для краткости обозначаемый NULL'ом, и трактуемый условными операторами как ложь :)
a = null => false
a <> null => false
в итоге выходит, что a ахуйбыегозналкаксравнить null (вот тут и выходит на сцену IS/IS NOT)
"The actual typing of Unknown (distinct or not from NULL itself) varies between SQL implementations"
Ну т.е. таки да, зависит от СУБД.
> a <> null => false
А not (a = null) и not (a <> null)? :)
null != null => ?
Выхлоп будет 3
UPD: Упс! Вернулся к разбору того же запроса, и обнаружил, что тому же сотруднику и правда так уже показалось.
Да там и так уже нелогичностей хватает... Вот берем к примеру постгрес с дефолтными настройками, и вот такую табличку: Выполняем запрос и получаем... сгруппированные NULL'ы. Т.е. все-таки NULL = NULL? :)
Теперь выполняем запрос и получем... что сумма NULL и 1 это 1. Т.е. все-таки NULL это 0? :)
Что касается суммы, то NULL’ы не принимаются за ноль, а просто исключаются из суммирования. Да, эффект тот же, и да, я полагаю это непоследовательным.
А сумма пустого множества какого-то хрена равна NULL, а не 0, и приходится дописывать всякие nvl и coalesce. Для AVG от пустого множества NULL вполне логичен, но SUM то за что испортили? Авторы стандарта не признают математику :(
если бы sum(null, null, ...) была бы 0, то результат получится совсем другой
Все строки с положительным значением колонки1 вместо пустого множества... Ну да, резонно.
во-первых: бля, тоже мне нашел что стандартом называть.
во-вторых: я ни разу не предлагал менять что либо кроме как `= null` и `<> null` сделать аналогами `is null` и `is not null`.
что не так с ISO/IEC 9075?
в добавок, есть такая достаточно распростаннёная парадигма, что если уже выложил денег за Оракакал/DB2/Sybase/этц, то грешно не пользоватся специальными фичами.
ЗЫ глубже не спрашивай - уже лет 15 не колупал и все забыл.
Ты считаешь что сложность проекта обусловлена количеством записей в базе?
Типа если у тебя 10 записей то можно MySQL, а если 2000 то надо уже Oracle? Ты правда так думаешь?
--А MySQL 10 000 записей выдержит?
--Выдержит
--А Postgres?
--Тоже
--А в чем тогда разница?
--В названии
Не изменяет :) Зато там другой гадости полно. Типа or'а в виде ||.
для следования стандартам есть стандарты
для всего остального есть мастеркард
Где Х - негативная характеристика обладателя оной точки зрения.Гоблача не предлагать.
У него обычно "С точки зрения малолетнего долбоеба - безусловно".
сишколеди
Вот уж средина близится,
А супервафела всё нет...
Оп! Оп! Оп! Оп! Оп!
Процедурный стаил
P.S. Не хочу устраивать священную войну на тему, почему надо ставить двоеточие и что значит символ "меньшебольше".
Проверять надо через
Причем во всех субд