Ответ
Агрегатная функция в SQL выполняет вычисление над набором строк и возвращает единственное значение. Она используется для получения сводных данных из таблицы.
Основные агрегатные функции:
COUNT()— подсчитывает количество строк.SUM()— вычисляет сумму значений столбца.AVG()— вычисляет среднее арифметическое.MAX()/MIN()— находит максимальное или минимальное значение.
Пример использования:
SELECT
COUNT(*) AS total_orders,
SUM(amount) AS total_revenue,
AVG(amount) AS average_order_value
FROM orders
WHERE customer_id = 123;
Ключевые особенности:
- Обработка NULL: Большинство агрегатных функций (кроме
COUNT(*)) игнорируют значенияNULL. - Группировка: Часто используются с предложением
GROUP BYдля агрегации по группам. - Фильтрация: Нельзя использовать напрямую в
WHERE; для фильтрации результатов агрегации применяетсяHAVING. - Одно значение: В запросе без
GROUP BYагрегатные функции сворачивают все выбранные строки в одну итоговую.
Ответ 18+ 🔞
Давай разжую эту тему про агрегатные функции, чтобы ты понял, как это работает, а не просто тупо зазубрил. Представь, что у тебя есть куча данных, и тебе надо из них выжать какую-то суть, одно число. Вот для этого эти функции и существуют, чтобы не считать вручную, а заставить базу данных потрудиться за тебя.
Основные пацаны на районе:
COUNT()— этот просто считает, сколько у тебя строк. "Сколько тут всего народу?".SUM()— этот складывает всё в столбце. "Сколько в итоге бабла?".AVG()— этот выводит среднюю температуру по больнице. "А сколько в среднем-то?".MAX()/MIN()— эти два брата-близнеца ищут самого большого и самого мелкого. "Кто тут рекордсмен, а кто аутсайдер?".
Вот смотри, как это в деле выглядит:
SELECT
COUNT(*) AS total_orders, -- Считаем, сколько всего заказов
SUM(amount) AS total_revenue, -- Складываем всю выручку
AVG(amount) AS average_order_value -- Считаем средний чек
FROM orders
WHERE customer_id = 123; -- И всё это для одного конкретного клиента
А теперь важные нюансы, без которых наебёшься:
-
Про NULL: Эти функции (кроме
COUNT(*)) — умные ребята. Они видятNULLи делают вид, что его нет. Игнорируют, блядь.SUM()не будет прибавлять хуй пойми что,AVG()не станет делить на пустое место.COUNT(*)— тот ещё похуист, ему всё равно, он считает ВСЕ строки, хоть они забиты NULL'ами. -
Группировка (
GROUP BY): Это когда тебе надо не одну общую цифру на весь запрос, а разбить всё по группам. Например, "сколько и кто потратил?". БезGROUP BYполучится одна строчка на весь результат. С ним — строчка на каждую группу. Охуенно мощный инструмент, но если его забыть, будет пиздец и ошибка. -
Фильтрация результатов: Вот тут ловушка, ёпта! Ты не можешь в
WHEREнаписатьWHERE AVG(amount) > 100.WHEREфильтрует строки ДО того, как они посчитаются. А чтобы отфильтровать уже ПОСЛЕ подсчёта, есть отдельный мужик —HAVING. Запомни:WHERE— для строк,HAVING— для сгруппированных результатов. Перепутаешь — SQL тебя пошлёт нахуй с синтаксической ошибкой. -
Свёртка в одно значение: Если ты пишешь запрос БЕЗ
GROUP BYи используешь агрегатную функцию, то база возьмёт ВСЕ подходящие под условия строки и склепает из них одну-единственную итоговую строчку. Всё, точка. Больше ничего не будет.
Короче, суть в том, чтобы превратить кучу данных в осмысленную цифру. Главное — не перепутай, когда фильтровать и как группировать, а то вместо отчёта получишь ебанину.