Лекція 4 - SQL, Select: агрегатні та групові функції
- Деталі
- Перегляди: 13711
Підрахунок кількості стрічок - COUNT
Групування в підмножини - GROUP BY
Відбір підмножин - HAVING
Агрегатні функції виконують операції над групами стрічок, зокрема: • COUNT визначає кількість стрічок або значень вказаного, що не є NULL-значеннями; • SUM – обчислює суму вибраних значень заданого поля; • AVG - обчислює середнє значення вибраних значень заданого поля; • MAX - обчислює найбільше значення вибраних значень заданого поля; • MIN - обчислює найменше значення вибраних значень заданого поля . В SELECT-запитах агрегатні функції використовуються як імена полів, а саме ім’я поля використовується як аргумент.
Підрахунок кількості стрічок - COUNT
Для підрахунку загальної кількості стрічок в таблиці використовують функцію COUNT із зірочкою
SELECT COUNT(*) FROM exam_marks; |
Аргумент DISTINCT дозволяє виключати дублікати із значень, які обробляються функцією COUNT
SELECT COUNT(DISTINCT subj_id) FROM subject; |
Групування в підмножини - GROUP BY
Оператор GROUP BY (групувати) дозволяє групувати записи в підмножини, які визнаються однаковими значеннями якого-небудь поля.
Нехай потрібно знайти максимальне значення оцінки, отриманої кожним студентом:
SELECT student_id, MAX(mark) FROM exam_marks GROUP BY student_id; |
Параметр, по якому здійснюється групування, необхідно вказати в вивідному списку для ідентифікації агрегованих значень групи.
В конструкції GROUP BY для групування може бути використано більше одного стовпчика. Спочатку йде формування групи по значеннях першого стовпчика, а всередині групи – по значеннях другого стовпчика : :
SELECT student_id, subj_id, MAX(mark) FROM exam_marks GROUP BY student_id, subj_id; |
Відбір підмножин - HAVING
При необхідності частина груп, сформованих за допомогою GROUP BY, може бути відібрана за допомогою критерію заданого в операторі HAVING. В умові, яка задається оператором HAVING, вказуються тільки поля або вирази, які мають одне значення для кожної групи:
SELECT subj_name, MAX(hour) FROM subject GROUP BY subj_name HAVING MAX(hour) >= 40; |