Упражнение 11 (подсказки и решения)

Наличие стандартной агрегатной функции AVG решает все проблемы:

SELECT AVG(speed)
FROM PC;

Однако на форуме сайта были замечены попытки выделиться из общей «серой» массы. Вот вполне эквивалентное решение, которое, правда, добавляет лишнюю операцию в процедурный план:

SELECT SUM(speed)/COUNT(speed)
FROM PC;

Справедливость следующего решения зависит от имеющихся ограничений:

SELECT SUM(speed)/SUM(1)
FROM PC;

А именно, если SUM(speed) игнорирует строки с NULL-значением скорости, то SUM(1) подсчитает общее количество строк в таблице PC, что, по существу, эквивалентно использованию COUNT(*). В результате в числителе будет подсчитана сумма скоростей всех ПК за исключением строк с неизвестной скоростью, которая будет делиться на общее число строк. Поэтому все приведенные решения будут эквивалентны, только если NULL-значения недопустимы, то есть имеется ограничение NOT NULL на столбце speed (загляните в схему данных).

Вернуться к обсуждению упражнения 11

Решить задачу на SQL-EX.RU