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

4.2.5. Фраза group by. Групування таблиці за рядками

Фраза GROUP BY дає змогу поділити множину рядків, одержаних після застосування фрази WHERE (тобто після фільтрації), на групи за ознакою рівності значень в одно­му чи кількох стовпцях. У цьому випадку агрегатні функції, що використовують­ся у фразі SELECT, діють не в усьому кінцевому реляційному відношенні, а лише в межах кожної групи. За наявності фрази GROUP BY кожний вираз у списку фрази SELECT повинен набувати єдиного значення для всієї групи, тобто він може бути:

  • константою;

  • агрегатною функцією;

  • таким самим виразом, що й у фразі GROUP BY;

  • виразом, що побудований з перелічених вище виразів.

Розглянемо кілька прикладів.

Запит 4.19

Запит 4.15 —____

Визначити кількість студентів на кожній кафедрі факультету інформатики.

SELECT КАФЕДРА.Назва, SUMCrPYRA.Кількість) Number_Of_Students_In_The_Departments FROM ФАКУЛЬТЕТ. КАФЕДРА. ГРУПА

WHERE ФАКУЛЬТЕТ.#F = КАФЕДРА.#F AND

КАФЕДРА.#D = ГРУПА.#D AND

ФАКУЛЬТЕТ.Назва = "інформатики" GROUP BY КАФЕДРА.Назва

Запит 4.16

Визначити кількість викладачів на кожному факультеті.

SELECT ФАКУЛЬТЕТ.Назва. C0UNT(*) Number_Of_Teachers_In_The_Faculty.

SUM (ГРУПА.Кількість) Number_Of_Students_In_The_Departments FROM ФАКУЛЬТЕТ. КАФЕДРА, ВИКЛАДАЧ

WHERE ФАКУЛЬТЕТ.#F = КАФЕДРА.#F AND

КАФЕДРА.#D = ВИКЛАДАЧ.#D GROUP BY ФАКУЛЬТЕТ.Назва

Запит 4.17

Для кожного викладача визначити кількість дисциплін, які він читає.

SELECT ВИКЛАДАЧ.Прізвище, COUNT(DISTINCT #S) Number_Of_Subjects

FROM ВИКЛАДАЧ. ЛЕКЦІЯ

WHERE ВИКЛАДАЧ.#Т = ЛЕКЦІЯ.#Т

GROUP BY ВИКЛАДАЧ.Прізвище

Запит 4.18

Отримати фонди факультетів з таблиці ФАКУЛЬТЕТ, а також обчислити їх як суми фондів кафедр.

SELECT ФАКУЛЬТЕТ.Назва. ФАКУЛЬТЕТ.Фонд. SUM(КАФЕДРА.Фонд) Departmentsjunds

FROM ФАКУЛЬТЕТ. КАФЕДРА

WHERE ФАКУЛЬТЕТ.#F = КАФЕДРА.#F

GROUP BY ФАКУЛЬТЕТ.Назва. ФАКУЛЬТЕТ.Фонд

4.2.6. Фраза having. Умова вибирання для груп рядків

Фраза HAVING має таке ж значення для груп, що й WHERE для рядків усієї таблиці: вона дає змогу задавати умови для груп рядків, сформованих фразою GROUP BY. Фраза HAVING може використовуватися лише за наявності фрази GROUP BY; вирази в HAVING повинні набувати єдиного значення для групи. В умовах, що формулюю­ться у фразі HAVING, можна використовувати агрегатні функції, які діють у межах створюваних груп, а також стовпці, за якими виконується групування. Розгляне­мо приклади.

Визначити факультети, де власний фонд перевищує сумарний фонд усіх кафедр.

SELECT ФАКУЛЬТЕТ.Назва FROM ФАКУЛЬТЕТ. КАФЕДРА

WHERE ФАКУЛЬТЕТ.#F = КАФЕДРА.#F GROUP BY ФАКУЛЬТЕТ.Назва. ФАКУЛЬТЕТ.Фонд HAVING ФАКУЛЬТЕТ.Фонд > SUM(КАФЕДРА.Фонд)

Запит 4.20

Визначити факультети, в яких власний фонд перевищує сумарний фонд усіх ка­федр на 2000

SELECT ФАКУЛЬТЕТ.Назва

FROM ФАКУЛЬТЕТ. КАФЕДРА

WHERE ФАКУЛЬТЕТ.#F = КАФЕДРА.#F

GROUP BY ФАКУЛЬТЕТ.Назва, ФАКУЛЬТЕТ.Фонд

HAVING (ФАКУЛЬТЕТ.Фонд - БиМСКАФЕДРА.Фонд)) > 2000

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