Написать пост

Суммируем и не только. Агрегатные функции в SQL - это просто.

Рассмотрим базовые агрегатные функции COUNT, SUM, MIN, MAX и AVG в SQL и как ими пользоваться в написании запросов.

Продолжаем нашу серию микро-уроков посвящённых основам языка SQL начатую здесь. Если вы прчли предыдущие темы и выполнили задания на SQLtest.online то вы уже знаете несколько английских слов и можете уверенно выбирать данные из таблиц SELECT, сортировать ORDER BY, ограничивать количество строк в выдаче LIMITOFSET и выполнять базовые вычисления над данными. Этот урок посвятим действиям над колонками в таблице и снова разучим несколько новых английских слов. Для того чтобы подсчитать количество строк в таблице - нужно знать слово COUNT - счёт(подсчёт) и написать следующий простой запрос:

			SELECT COUNT(name) FROM students; 

		

Обратите внимание что COUNT - это функция и в скобках указывается имя колонки для которой мы считаем количество значений. Если в одной из строк значение отсутствует (NULL) то такая строка не будет учтена в общем количестве! 

			|-------------|
| COUNT(name) |
|-------------|
| 7           |
		

Если нужно получить количество строк (включая NULL - значения), то вместо указания имени колонки впишем * Вот так:

			SELECT COUNT(*) FROM students; 
		

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

			SELECT COUNT(name) AS students_count FROM students;
		

Посмотрите - так горяздо лучше! Сразу понятно о чём идёт речь. Кстати я всегда советую использовать псевдонимы (алиасы) для результатов любых вычислений:

			|----------------|
| students_count |
|----------------|
| 7              |

		

Таким образом мы познакомились с функцией которая вычисляет значение из данных нескольких строк таблицы. Такие функции в SQL называются агрегатными. 

Агрегатные функции прекрасно сочетаются с условиями WHERE. Например мы можем подсчитать количество отличников:

			SELECT COUNT(name) AS excellent_students_count FROM students WHERE score = 5;
		

Как работает этот запрос? Как и в обычном SELECT база данных сначала выберет из таблицы все строки соответствующие условию, а затем выполнит функцию нод этими строками. В итоге мы получим следующий результат:

			|--------------------------|
| excellent_students_count |
|--------------------------|
| 2                        |

		

Кроме COUNT язык SQL предлагает нам ещё несколько базовых агрегатных функций:

  • SUM - сумма чисел в столбце
  • MIN - минимальное значение - работает не только с числами но и со строками и датами (для строк вернет первую из отсортированных по алфавиту строк, для дат самую рвннюю)
  • MAX - максимальное значение для чисел (последняя по алфавиту строка и самая поздняя дата) 
  • AVG - среднее значение так же как и SUM работает только с числами.

Приведём пример использования этих функций:

Сумма баллов полученных студентом:

			SELECT SUM(score) AS total_score FROM students WHERE name = 'Илья Краснов';
		

Минимальный, максимальный и средний балл по физике:

			SELECT MIN(score), MAX(score), AVG(score) FROM students WHERE course = 'Физика';
		

Прежде чем углубиться в изучение агрегатных функций я советую вам закрепить уже изученный материал решив первые задачи из категории "Агрегатные функции" на сайте SQLTest.online

Следите за новыми постами
Следите за новыми постами по любимым темам
237 открытий2К показов