- •20. Таблиці індексів в бд
- •21. Безпека та цілісність даних в скбд
- •27. Агрегуючі функції в sql-інструкціях
- •28. Приклади використання агрегуючих функцій у запитах на вибірку
- •29. Запити на зміну даних в таблиці
- •30. Запити в ms Access
- •31. Заповнення бланку запиту за зразком
- •32. Обчислення в запитах
- •33. Запити з параметром
- •34. Форми в ms Access
- •36. Призначення макросів в Microsoft Access
- •37. Призначення модулів в Microsoft Access
- •11. Бази даних як групи пов`язаних таблиць
- •12. Зв`язки між таблицями
- •13. Правильна структура бд
- •14. Виконання операцій експорту та імпорту таблиць за допомогою Access
- •15. Використання Майстра підстановок.
- •16. Зв'язки між таблицями в базі даних
- •17. Види зв'язків між таблицями
- •18. Використання ключових полів для завдання зв'язку між таблицями
- •19. Схема даних
27. Агрегуючі функції в sql-інструкціях
Запити дозволяють не тільки відбирати потрібну інформацію з таблиць і обробляти її шляхом створення нових полів, що обчислюються, але і робити так звані підсумкові обчислення.
Прикладом підсумкового обчислення може служити сума усіх значень в якійсь групі записів або їхнє середнє значення, хоча крім суми і середнього значення існують і інші підсумкові функції. Оскільки підсумкові функції для одного запису не мають змісту й існують тільки для групи записів, те попередньо записи треба згрупувати по певній ознаці. Тобто групу складають записи, що мають однакове значення по певному полю. Напевно зрозуміло, що це поле не повинно бути унікальним.
Агрегуючі функції використовуються для отримання узагальнюючих значень. Результатом таких функції завжди є єдине значення. Як аргумент таких функцій, як правило, використовують назви полів, але допускаються і константи , функції та їх комбінації.
Агрегуюча функція |
Результат |
SUM( вираз) |
Сума значень |
AVG( вираз) чи AVARAGE(вираз) |
Середня величина значень |
COUNT( вираз) |
Кількість непорожніх значень |
COUNT(*) |
Кількість вибраних записів |
MAX(вираз) |
Максимальне значення |
MIN(вираз) |
Мінімальне значення |
Для перших двох, зі списку, функцій аргументом може бути лише числове поле(вираз), для інших - довільне.
Наприклад, запит : SELECT MAX(id) FROM stud повертає значення максимального ідентифікатора (табельного номера) з таблиці студентів.
Часто трапляється, що потрібно отримати значення агрегуючих функцій полів не для усіх вибраних записів, а лише в розрізі унікальних значень інших полів вибірки. В цьому випадку необхідно застосувати конструкцію GROUP BY , в списку полів якої потрібно перерахувати інші поля вибірки, унікальні комбінації яких утворять групи з однаковим значення агрегуючої функції. Наприклад, запит:SELECT grp, MIN(id) FROM stud GROUP BYgrp повертає набір мінімальних значень табельного номеру для кожного з існуючих значень ідентифікатора груп. Кількість рядків у такому наборі відповідає кількості унікальних значень поля grp в таблиці stud.
28. Приклади використання агрегуючих функцій у запитах на вибірку
1) що знайти значення ідентифікатора останньої зареєстрованої студентської групи (максимальне значення поля id з таблиці grp) слід виконати наступний запит
SELECT MAX(id) FROM grp |
2) що знайти кількість студентів, які навчаються на заочній формі навчання слід виконати наступний запит
SELECT COUNT(*) FROM stud s , grp g , formed f WHERE grp = g.id AND fed = f.id AND f.name="заочна" |
3) що знайти кількість груп на 2-му курсі факультету фінансів слід виконати наступний запит
SELECT COUNT(*) FROM grp g , inst i WHERE inst = i.id AND i.name="ФФ" AND curs =2 |
4) що вибрати назви груп та кількість студентів, які в них навчаються, відсортованих в порядку зростання другого поля слід виконати наступний запит
SELECT g.name , COUNT(*) FROM grp g , stud s WHERE grp = g.id GROUP BY g.name ORDER BY 2 |
5) що вибрати назви факультетів, форм навчання та кількість груп у них, відсортованих в порядку зростання першого та другого поля слід виконати наступний запит
SELECT i.name, f.name , COUNT(*) FROM grp g , inst i, formed f WHERE fed = f.id AND inst = i.id GROUP BY i.name, f.name ORDER BY 1 , 2 |
6) що вибрати назви факультетів, назви груп та кількість студентів, які в них навчаються, для яких ця кількість перевищує число 37, відсортованих у порядку спадання кількості студентів, слід виконати наступний запит
SELECT i.name, g.name , COUNT(*) FROM grp g , inst i, stud s WHERE grp = g.id AND inst = i.id GROUP BY i.name, g.name HAVING COUNT(*) > 37 ORDER BY 3 DESC |
