Упражнение 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 (загляните в схему данных).