SQL Урок 3. Агрегатные функции

SQL   31 марта 2012  Автор статьи:  

В данной статье мы рассмотрим работу с функциями, которые вычисляют какое — то значение на основе выборки по столбцу. Примерами таких функций могут служить нахождения минимального или максимального значения в столбце. Перечислим агрегатные функции:

  • MAX — нахождение максиума
  • MIN — нахождение минимума
  • COUNT — количество записей
  • SUM — сумма всех значений
  • AVG — среднее

Функцию COUNT можно применять не только для подсчета количества элементов в столбце, но и для подсчета количество записей в подмножестве:

SELECT COUNT(*) FROM Student

Для того, чтобы найти количество уникальных записей будем использовать DISTINCT. Пусть нам надо вывести количество различных возрастов в таблице Student.

SELECT COUNT(DISTINCT Age) FROM Student

Теперь попробуем вывести тех студентов, которые имеют максимальный возраст:

SELECT * FROM Student WHERE Age=MAX(Age)

Соответственно для того, чтобы вывести самых младших студентов:

SELECT * FROM Student WHERE Age=MIN(Age)

Теперь хотим вернуть средний возраст студентов:

SELECT AVG(Age) FROM Student

Для того, чтобы переименовать столбец, который вернется, необходимо использовать AS:

SELECT SUM(Age) AS SUM_Age FROM Student

Получим в результате таблицу с единственным столбцом с именем SUM_Age и с единственной записью в которой будет содержаться сумма всех возрастов. Приведем пример переименования столбцов для таблицы Student, который показывает что ключевое слово AS применяется по умолчанию, т.е вам не обязательно его писать.

SELECT ID AS Student_Number,Name FirstName, Age AS StudentAge FROM Student

Таким образом у вам выведется таблица в которой будут три столбца: Student_Number, FirstName и StudentAge.
При использовании агрегатных функций может потребоваться посчитать их для различных групп для этого используется GROUP BY. Выведем максимальный возраст для каждого имени студента:

SELECT Name, MAX(Age) AS Max_Age FROM Student
GROUP BY Name

Таким образом агрегатные функции исполняются над всеми данными, если не использован модификатор GROUP BY, который выполнит функции отдельно для каждой группы.
Для того, чтобы использовать проверку условий после GROUP BY необходимо использовать HAVING вместо WHERE

SELECT Name, MAX(Age) AS Max_Age FROM Student
GROUP BY Name
HAVING Age > 18

Порядок обработки операторов:

  1. FROM
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY

Научиться программировать

  • на Delphi

  • на Java

  • на C++