|
Программирование >> Руководство по sql
0877 0877 0877 1389 0877 0736 0736 0736 0877 0877 1389 0736 1389 Теперь сгруппируем данные по издателям: SQL: select pub id from titles group by pub id Результат: pub id ~о7зб 0877 1389 Такой же результат получился бы и при использовании ключевого слова DISTINCT. Одинаковые результаты также получаются при группировке книг по типам и использовании конструкции SELECT DISTINCT type: SQL: select type from titles group by type Результат: ype NULL business mod cook / popular comp psychology trad cook Предложение GROUP BY с агрегирующими функциями. В предыдущей главе рассматривались агрегирующие функции, текущая глава посвящена предложению GROUP BY. Теперь мы наконец объединим их. Фактически агрегирующие функции и предложение GROUP BY просто созданы друг для друга. GROUP BY создает набор, а афегирующие функции вычисляют для него конкретное значение. С их помощью можно получить очень полезную информацию. Давайте рассмотрим несколько характерных запросов. С помощью следующего оператора находятся средние затраты и сумма доходов от продаж по каждому типу книг: SQL: select type, avg{advance), sum(ytd sales) from titles group by type Результат: typ e NULL NULL NULL business 6281.25 30788 mod cook 7500 24278 popular comp 7500 12875 psychology 4255 9939 trad cook 6333.33333333333 19566 Суммарные значения, полученные с помощью оператора SELECT, предложения GROUP BY и агрегирующих функций составляют два новых столбца результата. С помощью следующего запроса можно проследить зависимость между ценовыми категориями и средними расходами: SQL: select price, avg(advance) from titles group by price Результат:
GROUP BY с предложением WHERE. Как вы могли заметить, при отсутствии в запросе предложения GROUP BY агрегирующие функции применяются ко всей таблице целиком. В этом случае для выбора строк, участвующих в вычислениях, можно было использовать предложение WHERE. Это же верно и при наличии групп. Совместная работа предложений WHERE и GROUP BY происходит следующим образом. Сначала находятся все строки, удовлетворяющие условиям предложения WHERE. Затем предложение GROUP BY делит отобранные строки на Фуппы. Строки, не удовлетворяющие условиям предложения WHERE, не включаются ни в одну группу. Ниже приведен соответствующий пример: SQL: select type, avg(price) from titles where advance > $5000 group by type Результат: ype business mod cook popular comp psychology trad cook 2.99 2.99 21.48 14.30 17.97 Этот же запрос без предложения WHERE приводит к другим результатам: SQL: select type, avg(price) from titles group by type Результат: type NULL business mod cook popular comp psychology trad cook NULL 13.73 11.49 21.47 13.50 15.96 В результате выполнения этого запроса появляется новая строка (с типом и средней ценой NULL), а также изменяются все средние цены, за исключением книг по компьютерам. Появление новой строки объяснить очень просто - в предложении WHERE ищутся все строки со значением расходов выще $5000, поэтому строки с нулевым значением расходов сразу отвергаются. Поэтому, в отличие от последнего запроса, в первом запросе группа NULL отсутствует. Если выполнить следующий запрос, а затем вручную применить к его результатам предложение WHERE (пометив звездочками строки со значением расходов больще $5000), то станет ясно, каким образом были получены результаты в первом запросе (с предложениями GROUP BY и WHERE): SQL: select type, price, advance from titles Результат: type price advance business 11.95 5000 business 19.99 5000 business 2.99 10125***
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |