Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_Po_Bazam_Dannykh (1).doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1.75 Mб
Скачать

Фраза group by

Мы показали, как можно вычислить массу определенного продукта, поставляемого поставщиками. Предположим, что теперь требуется вычислить общую массу каждого из продуктов, поставляемых в настоящее время поставщиками. Это можно легко сделать с помощью предложения

SELECT ПР, SUM(К_во)

FROM Поставки

GROUP BY ПР;

Результат показан на рис. 2.3,а.

а)

б)

в)

г)

ПР

9

0

11

150

12

30

15

370

1

370

3

250

5

170

6

220

8

150

7

200

2

0

4

100

13

190

14

70

16

250

17

50

10

220

ПС

ПР

Цена

К_во

1

9

-0-

-0-

3

9

-0-

-0-

5

9

-0-

-0-

1

11

1.50

50

5

11

-0-

-0-

6

11

-0-

-0-

8

11

1.00

100

1

12

3.00

10

3

12

2.50

20

6

12

-0-

-0-

1

15

2.00

170

3

15

1.50

200

2

1

3.60

300

7

1

4.20

70

2

3

-0-

-0-

7

3

4.00

250

. . .

ПР

1

370

2

0

3

250

4

100

5

170

6

220

7

200

8

150

9

0

10

220

11

150

12

30

13

190

14

70

15

370

16

250

17

50

ПР

9

0

11

150

12

30

15

70

1

370

3

250

5

70

6

140

8

150

7

200

2

0

4

100

13

190

14

70

16

250

17

50

10

220

Рис. 2.3. Иллюстрации к фразе GROUP BY

Фраза GROUP BY (группировать по) инициирует перекомпоновку указанной во FROM таблицы по группам, каждая из которых имеет одинаковые значения в столбце, указанном в GROUP BY. В рассматриваемом примере строки таблицы Поставки группируются так, что в одной группе содержатся все строки для продукта с ПР = 1, в другой – для продукта с ПР = 2 и т.д. (см. рис. 2.3.б). Далее к каждой группе применяется фраза SELECT. Каждое выражение в этой фразе должно принимать единственное значение для группы, т.е. оно может быть либо значением столбца, указанного в GROUP BY, либо арифметическим выражением, включающим это значение, либо константой, либо одной из SQL-функций, которая оперирует всеми значениями столбца в группе и сводит эти значения к единственному значению (например, к сумме).

Отметим, что фраза GROUP BY не предполагает ORDER BY. Чтобы гарантировать упорядочение по ПР результата рассматриваемого примера (рис. 2.3,в) следует дать запрос

SELECT ПР, SUM(К_во)

FROM Поставки

GROUP BY ПР

ORDER BY ПР;

Наконец, отметим, что строки таблицы можно группировать по любой комбинации ее столбцов. Так, по запросу

SELECT Т, БЛ, COUNT(БЛ)

FROM Заказ

GROUP BY Т, БЛ;

можно узнать коды и количество порций блюд, заказанных отдыхающими пансионата (32 человека) на каждую из трапез следующего дня:

Т

БЛ

COUNT(БЛ)

1

3

18

1

6

14

1

19

17

1

21

15

...

Если в запросе используются фразы WHERE и GROUP BY, то строки, не удовлетворяющие фразе WHERE, исключаются до выполнения группирования.

Например, выдать для каждого продукта его код и общий объем возможных поставок, учитывая временную недееспособность поставщика с ПС=2:

SELECT ПР, SUM(К_во)

FROM Поставки

WHERE ПС <> 2

GROUP BY ПР;

Результат, приведенный на рис. 2.3,г, отличается от результата (рис. 2.3,а) аналогичного запроса для всех поставщиков объемом поставок продуктов с кодами 15, 5 и 6.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]