|
Программирование >> Sql: полное руководство
AND PRODOCT = PRODUCT ID GROOP BY MFR ID, PRODUCT ID, DESCRIPTION, PRICE, QTY ON HAND HAVING SUM(QTY) > (.75 * QTY ON HAND) ORDER BY QTY ON HAND DESC DESCRIPTION PRICE QTY ON HAND SUM(QTY) Reducer $355.00 38 32 Widget Adjuster $25.00 37 30 Motor Mount $243.00 15 16 Right Hinge $4,500.00 12 15 500-lb Brace $1,425.00 5 22 Чтобы осуществить этот запрос, СУБД выполняет следующие действия: 1. Объединяет таблицы orders и products, чтобы получить описание, цену и ко-.уичество единиц на складе для каждого заказанного товара. 2. Группирует строки объединенной таблицы по идентификатору производителя и товара. 3. Исключает группы, в которых количество заказанных единиц составляет менее 75 процентов от количества на складе. 4. Вычисляет общее количество заказанных единиц для каждой группы. 5. Генерирует одну итоговую строку запроса для каждой группы. 6. Сортирует результаты запроса таким образом, чтобы товары, которых на складе больще, щди первыми. Как было сказано ранее, столбцы description, price и qty on hand должны быть указаны в качестве столбцов фуппировки, поскольку они перечислены в списке возвращаемых столбцов. Однако на деле они не участвуют в процессе группировки, поскольку столбцы mfr id и product id полностью определяют строку таблицы products и три оставщихся столбца автоматически имеют в группе одно значение. Ограничения на условия отбора групп Предложение having используется для того, чтобы включать и исключать группы строк из результатов запроса, поэтому используемое в нем условие отбора применяется не к отдельным строкам, а к группе в целом. Это значит, что в условие отбора может входить: константа; статистическая функция, возвращающая одно значение для всех строк, входящих в группу; столбец группировки, который по определению имеет одно и то же значение во всех строках группы; выражение, включающее в себя перечисленные выще элементы. На практике условие отбора предложения having всегда должно включать в себя как минимум одну статистическую функцию. Если это не так, значт, условие отбора Можно переместить в предложение where. Чтобы определить, где следует указать условие отбора - в предложении where или having, - необходимо вспомнить, как применяются эти предложения: предложение where применяется к отдельным строкам, поэтому выражения, содержащиеся в нем, должны вычисляться для отдельных строк; предложение having применяется к группам строк, поэтому выражения, содержащиеся в нем, должны вычисляться для групп строк. Значения NULL и условия отбора групп Как и условие отбора в предложении where, условие отбора в предложении having может дать один из следующих результатов: если условие отбора имеет значение true, группа строк остается и для нее генерируется одна строка результатов запроса; если условие отбора имеет значение false или null, группа строк исключается и строка для нее в результатах запроса не генерируется. Правила обработки значений null в условиях отбора для предложения having точно такие же, как и для предложения where; они описаны в главе 6. Предложение HAVING без GROUP BY Предложение having почти всегда используется в сочетании с предложением group by, однако синтаксис инструкции select не требует этого. Если предложение having используется без предложения group by, СУБД рассматривает полные результаты запроса как одну группу. Другими словами, статистические функции, содержащиеся в предложении having, применяются к одной и только одной группе, и эта группа состоит из всех строк. На практике предложение having очень редко используется без соответствующего предложения group by. Резюме в настоящей главе были рассмотрены итоговые запросы. В итоговых запросах используются статистические функции, которые позволяют на основании столбца значений получить одно итоговое значение. Статистические функции могут найти среднее значение, сумму, минимальное и максимальное значение для столбца, подсчитать число значений в столбце или число строк в таблице результатов запроса. Итоговый запрос без предложения group by генерирует одну строку результатов запроса на основании всех строк таблицы или произведения таблиц Итоговый запрос с предложением group by генерирует несколько строк результатов запроса, каждая из которых является итоговой для одной группы Предложение having является аналогом предложения where для групп и позволяет отбирать группы строк по определенному критерию. Tf 1! Подчиненные запросы на выборку
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |