Программирование >>  Руководство по sql 

1 ... 39 40 41 [ 42 ] 43 44 45 ... 105


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

Результат:

price

NULL

NULL

2.99

12562.5

6000

7.99

4000

10.95

2275

11.95

4500

14.99

8000

19.99

3000

8000

20.95

7000

21.59

7000

22.95

7000

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***



1 ... 39 40 41 [ 42 ] 43 44 45 ... 105

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика