|
Программирование >> Понятие sql
SELECT snum, MAX (amt) FROM Orders WHERE odate = 10/03/1990 GROUP BY snum; =============== SQL Execution Log ============== SELECT snum, odate, MAX (amt) FROM Orders GROUP BY snum, odate; snum 1001 767.19 1002 5160.45 1014 1900.10 1007 1098.16 Рисунок 6.8: Максимальное значение суммы приобретений у каждого продавца на 3 Октября Поскольку поля 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, вы не можете использовать агрегат агрегата. Предположим что вы хотите выяснять, в какой день имелась наибольшая сумма приобретений. Если вы попробуете сделать это, SELECT odate, MAX ( SUM (amt) ) FROM Orders GROUP BY odate; то ваша команда будет вероятно отклонена.(Некоторые реализации не предписывают этого ограничения, которое является выгодным, потому что вложенные агрегаты могут быть очень полезны, даже если они и несколько проблематичны.) Ввышеупо-мянутой команде, например,SUM должен применяться к каждой группе поля odate, а MAX ко всем группам, производящим одиночное значение для всех групп. Однако предложение GROUP BY подразумевает что должна иметься одна строка вывода для каждой группы поля odate. РЕЗЮМЕ Теперь вы используете запросы несколько по-другому. Способность получать, а не просто размещать значения, очень мощна. Это означает что вы не обязательно должны следить за определенной информацией, если вы можете сформулировать запрос так, чтобы ее получить. Запрос будет давать вам поминутные результаты, вто время как таблица общего или среднего значений будет хороша только некоторое время после ее модификации. Этонедолжнонаводитьнамысль, что агрегатные функции могут полностью вытеснить потребность в отслеживании информации такой например как эта. Вы можете применять эти агрегаты для групп значений определенных предложением GROUP BY. Эти группы имеют значение поля в целом, и могут постоянно находиться внутри других групп которые имеют значение поля в целом. Втожевремя, предикаты еще используются чтобы определять какие строки агрегатной функции применяются. Объединенные вместе, эти особенности делают возможным, производить агрегаты основанные на сильно определенных подмножествах значений в поле. Затем вы можете определять другое условие для исключения определенных результатов групп с предложением HAVING. Теперь, когда вы стали знатоком большого количества того как запрос производит значения, мы покажем вам, вГлаве7, некоторые вещи которые вы можете делать со значениями которые он производит. РАБОТА С SQL 1. Напишите запрос, который сосчитал бы все суммы приобретений на 3 Октября. 2. Напишите запрос, который сосчитал бы число различных не-NULL значений поля city в таблице Заказчиков. 3. Напишите запрос, который выбрал бы наименьшую сумму для каждого заказчика. 4. Напишите запрос, который бы выбирал заказчиков в алфавитном порядке, чьи имена начинаются с буквы G. 5. Напишите запрос, который выбрал бы высшую оценку в каждом городе. 6. Напишите запрос, который сосчитал бы число заказчиков, регистрирующих каждый день свои порядки.(Если продавец имел более одного порядка в данный день, он должен учитываться только один раз.) (См. Приложение A для ответов.) ФОРМИРОВАНИЕ В1ВОДОВ ЗАПРОСОВ
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |