Re: Perl or Python?
> > Думаю, это не принципиально, можно придумать ситуацию, когда запись таки
> > > должна появиться. Например, если подобное поле в таблице не одно, а их
> > > больше, и в другом поле за сегодня существует некое число.
> >
> > Можно придумать ситуацию, когда такая _оптимизация_ оправдана. А ситуацию,
> > когда запись таки _должна_ появиться, придумать нельзя.
> >
>
> Хорошо - есть таблица людей, где есть поле "серия паспорта", но некоторые из
> людей еще не имеют его по возрасту. Надо для каждого атрибута заводить
> отдельную таблицу пересечений - из-за того, что атрибут у кого-то может
> просто _отсутствовать_?
Примерно. Потому что через некоторое время ты с удивлением узнаешь, что
некоторые люди, оказывается, вместо паспорта имеют (и используют!)
удостоверение личности с совершенно другой нумерацией, некоторые другие -
загранпаспорт, причем совсем не обязательно российский, а некоторые третьи -
более одного паспорта, и могут придти с любым.
> > Потому что ... представь себе ситуацию, когда тебе нужно посчитать среднюю
> > минимальную температуру за месяц. Если у тебя в месяце было три дня, когда
> > никто в отделении не лежал. Задача поставлена корректно, имеет вполне
> > понятное решение.
>
> Нет, для таблицы температура вычисляется не средняя "за месяц", а средняя на
> дискретном множестве записей.
Задача ставится так, как я сказал. Заказчиком. Дословно.
> Как будем лечить, если у тебя есть поле типа float с
> > возможным null? Будем писать "and minTerm is not null"? А если нужно в
> > том
> > же запросе выдать еще и агрегат по другому полю, которое в эти дни было не
> > null? Писать самопальный average? Хотя штатный average наверняка null'ы
> > игнорирует, как и нужно для этой задачи...
>
> Полагаю, что не только average игнорирует, а вообще любая функция в SQL,
> равно как и все условия после WHERE.
Это - точно неправда. Условие ее не игнорирует. Условие имеет "булевское
значение NULL", если на такое натыкается. А average, если реализована
правильно, будет именно что игнорировать. Разница будет заметна, если
в одном запросе посчитать average по двум полям, у которых NULL в разных
записях.
С другой стороны, NULL и, как следствие, average не различает ситуации
"значение неизвестно" и "значения нет и быть не должно". А по-хорошему в
первом случае average должна выдавать ошибку "не все необходимые данные
известны". В то время как во втором должна честно считать среднее по тем
записям, у которых это значение есть.
--
Что-то я не тем полушарием думаю...
-- (С)энта
Reply to: