Скачиваний:
25
Добавлен:
01.04.2014
Размер:
761.34 Кб
Скачать

72 Понимание sql

______________________________________________________________________

ГЛ. 6

Поскольку поля odate нет, не может быть и выбраных полей, значение

этих данных меньше чем в некоторых других примерах.

Вывод должен вероятно включать что-нибудь такое что говорит -

" это - самые большие порядки на 3 Октября." В Главе 7, мы

покажем как вставлять текст в ваш вывод.

Как и говорилось ранее, HAVING может использовать только аргументы

которые имеют одно значение на группу вывода. Практически, ссылки

на агрегатные функции - наиболее общие, но и поля выбранные с помощью

GROUP BY также допустимы. Например, мы хотим увидеть наибольшие

порядки для Serres и Rifkin:

SELECT snum, MAX (amt)

FROM Orders

GROUP BY snum

HAVING snum B (1002,1007);

Вывод для этого запроса показывается в Рисунке 6.9.

=============== SQL Execution Log ==============

| |

| SELECT snum, MAX (amt) |

| FROM Orders |

| GROUP BY snum |

| HAVING snum IN ( 1002, 1007 ); |

| =============================================== |

| snum |

| ------ -------- |

| 1002 5160.45 |

| 1007 1098.16 |

| |

================================================

Рисунок 6. 9: Использование HAVING с GROUP BY полями

НЕ ДЕЛАЙТЕ ВЛОЖЕННЫХ АГРЕГАТОВ

В строгой интерпретации ANSI SQL, вы не можете использовать агрегат

агрегата. Предположим что вы хотите выяснять, в какой день имелась

CУММИРОВАНИЕ ДАННЫХ

С ПОМОЩЬЮ АГРЕГАТНЫХ ФУНКЦИЙ 73

______________________________________________________________________

наибольшая сумма приобретений. Если вы попробуете сделать это,

SELECT odate, MAX ( SUM (amt) )

FROM Orders

GROUP BY odate;

то ваша команда будет вероятно отклонена. ( Некоторые реализации не

предписывают этого ограничения, которое является выгодным, потому

что вложенные агрегаты могут быть очень полезны, даже если они и

несколько проблематичны.) В вышеупомянутой команде, например,

SUM должен применяться к каждой группе поля odate, а MAX ко

всем группам, производящим одиночное значение для всех групп.

Однако предложение GROUP BY подразумевает что должна иметься

одна строка вывода для каждой группы поля odate.

=============== РЕЗЮМЕ ================

Теперь вы используете запросы несколько по-другому. Способность

получать, а не просто размещать значения, очень мощна.

Это означает что вы не обязательно должны следить за определенной

информацией если вы можете сформулировать запрос так чтобы ее

получить. Запрос будет давать вам по-минутные результаты, в то время

как таблица общего или среднего значений будет хороша только некоторое

время после ее модификации. Это не должно наводить на мысль, что

агрегатные функции могут полностью вытеснить потребность в

отслеживании информации такой например как эта.

Вы можете применять эти агрегаты для групп значений определенных

предложением GROUP BY. Эти группы имеют значение поля в целом, и

могут постоянно находиться внутри других групп которые имеют

значение поля в целом. В то же время, предикаты еще используются

чтобы определять какие строки агрегатной функции применяются.

Объединенные вместе, эти особенности делают возможным, производить

агрегаты основанные на сильно определенных подмножествах значений в

поле. Затем вы можете определять другое условие для исключения

определенных результатов групп с предложением HAVING.

Теперь , когда вы стали знатоком большого количества того как

запрос производит значения, мы покажем вам, в Главе 7, некоторые

вещи которые вы можете делать со значениями которые он производит.

74 ПОНИМАНИЕ SQL

______________________________________________________________________

ГЛ. 6

Соседние файлы в папке ПОНИМАНИЕ SQL