SQL: агрегатные функции со столбцами типа DATE

Я наткнулся на вопрос (в тесте) о том, какие агрегатные функции применимы к столбцам типа DATE. Итак, насколько я понимаю, COUNT будет просто подсчитывать количество строк, а MIN и MAX возвращают самую раннюю / последнюю дату. Однако меня немного смущают функции SUM и AVG. Будут ли они просто преобразовывать значения DATE в целые числа и вычислять сумму / среднее для этих целых чисел? Или я здесь не прав? В любом случае, одинаково ли такое поведение во всех реализациях SQL? Заранее спасибо.


person sdds    schedule 14.06.2012    source источник
comment
COUNT просто подсчитает количество строк. На самом деле это не совсем так. Вы правы, что COUNT(*) подсчитывает количество строк, но COUNT(somedatetypecolumn) подсчитывает количество строк, где somedatetypecolumn не равно NULL.   -  person Mark Byers    schedule 14.06.2012
comment
Ах да, я не был там достаточно откровенен.   -  person sdds    schedule 14.06.2012


Ответы (1)


В MS SQL Server нельзя вызывать оператор SUM для типов datetime, а также нельзя вызывать оператор AVG.

MSDN перечисляет типы возвращаемых значений оператора SUM здесь:
http://msdn.microsoft.com/en-us/library/ms187810.aspx.

Это также действительная ссылка для типов, для которых вы можете вызывать оператор SUM.

РЕДАКТИРОВАТЬ: В ответ на ваш комментарий вы можете использовать такой сайт, как sqlfiddle, для тестирования различных реализаций

http://www.sqlfiddle.com/#!3/22cee/1

Учитывая, что внутреннее хранилище datetime не стандартизировано, я утверждаю, что от него не следует зависеть, чтобы какая-либо база данных возвращала SUM или AVG результаты предсказуемым образом ... лучше не делать этого вообще. ..

person Matthew    schedule 14.06.2012
comment
Это интересно, потому что я попробовал SUM и AVG для столбца типа DATE в MySQL, и он вернул только это - сумму и среднее значение целых чисел. Спасибо за ваш ответ! - person sdds; 14.06.2012