Агрегатная функция от агрегатной функции стр. 3 |
||
|
Приведем ниже несколько стандартных решений рассматриваемой задачи.
1. Использование предиката ALL в предложении WHERE
На естественном языке этот запрос звучит следующим образом: «Найти производителей, средняя цена на ПК у которых не меньше, чем средние цены у КАЖДОГО из производителей ПК». 2. Использование внутреннего соединения
Здесь мы соединяем подзапрос, определяющий производителей и средние цены на их ПК, с подзапросом, в котором определяется максимальная средняя цена. Соединение выполняется по условию равенства средней цены из первого подзапроса с максимальной ценой из второго. 3. Использование предиката ALL в предложении HAVING
Это решение отличается от первого варианта отсутствием «лишнего» запроса, который пришлось написать лишь затем, чтобы была возможность использовать алиас avg_price в предложении WHERE (смотри порядок обработки предложений оператора SELECT); с другой стороны, использование в предложении WHERE агрегатной функции также запрещено правилами языка. Все приведенные стандартные решения выглядят тяжеловесными, хотя и будут работать практически во всех СУБД. Эта громоздкость объясняется повторением в коде фактически одного и того же запроса. Однако общие табличные выражения – CTE, которые были введены в последних версиях стандарта, позволяют многократно ссылаться на один раз сформулированный запрос. Например, решения 1, 3 с помощью CTE можно записать в таком виде:
Замечу, что поддержка общих табличных выражений появилась в SQL Server 2005 и в PostgreSQL 8.4. |
||
| Аналитические материалы про компрессор. Заметки про передвижной дизельный компрессор. |
| ukm.ru |
| Bergauf |
| ТК - продажа строительных материалов. О производителе. |
| stroybazis-gr.ru |
| Фотостудия москва |
| Свадебный портал. Услуги по фотосъемке, цены, галерея работ. |
| evgenyfist.ru |


