Книги и статьи по SQL Rambler's Top100 Switch language to: English 23 апреля 2024 г. 22:55:50


www.sql-ex.ru
Skip Navigation Links  

 

Print  Версия для печати

На главную страницу

Упражнения DML

Моисеенко С.И.

» Любое упражнение должно решаться одним запросом. Если, допустим, по условию задачи требуется добавить в таблицу несколько строк, то вместо нескольких запросов типа

INSERT ... VALUES...

следует использовать оператор INSERT с подзапросом.

» В одной из задач требуется определить максимальную скорость имеющихся CD-ROM. Ошибка состоит в использовании

SELECT MAX( cd ) FROM ...

Дело в том, что скорость CD-ROM хранится в текстовом представлении (например, '12x'). При сравнении текстовых констант '4x' оказывается больше, чем '24x'. А если потребуется посчитать СРЕДНЮЮ скорость?!

» В одной из задач требуется округлить среднее значение года спуска на воду кораблей.
Типичной ошибкой здесь является, например, такой прием:

round(avg(launched), 0)

Как я уже писал в справке на сайте, среднее значение приводится к типу аргумента. В данном случае оно приводится к целому числу, т.к. столбец launched имеет тип int. При этом никакого округления не происходит, поскольку дробная часть просто ОТБРАСЫВАЕТСЯ.

Таковы особенности реализации в SQL Server. Причем это легко проверить (хотя мало кто делает):

SELECT AVG(launched) FROM ( SELECT 9 AS launched UNION ALL SELECT 10 UNION ALL SELECT 10 ) x

Т.е. мы должны получить 29/3, т.е. почти 10. Однако получим мы 9. В результате функция ROUND здесь уже совершенно лишняя, т.к. округлять нечего.

Так как же здесь следует поступить? Нужно привести аргумент к вещественному типу, по нему считать среднее, а уже затем округлять.

На главную страницу

Print  Версия для печати


Использование любых материалов данного сайта возможно только
при условии обязательного размещения прямой ссылки на сайт
http://www.sqlbooks.ru
на каждой странице, где размещены используемые материалы.

 Начало   Статьи    Книги 
Рейтинг@Mail.ru Rambler's Top100 Alt Упражнения по SQL: обучение, тестирование, сертификация по языку SQL Copyright c 2002-2006. All rights reserved.