Основные типы функций в SQL и их назначение
Краткий ответ
В SQL существуют агрегатные и скалярные функции. Агрегатные обрабатывают группы строк и возвращают одно значение, а скалярные работают с отдельными значениями, выдавая результат для каждой строки.
Развёрнуто
Краткий ответ
SQL функции делятся на две основные категории: агрегатные и скалярные. Агрегатные функции, такие как SUM(), AVG(), COUNT(), MAX() и MIN(), обрабатывают набор строк и возвращают одно итоговое значение. Скалярные функции, например, UPPER(), LOWER(), LEN(), ROUND(), GETDATE(), работают с каждым отдельным значением и возвращают результат для каждой строки.
Как это работает
Агрегатные функции применяются для вычислений по множеству строк и часто используются с оператором GROUP BY. Они позволяют получить сводные данные — сумму, среднее, количество и т.д.
Скалярные функции обрабатывают отдельные значения в каждой строке, изменяя или вычисляя новые данные на уровне поля. Они возвращают по одному значению на каждую входящую строку.
| Тип функции | Принцип работы | Примеры |
|---|---|---|
| Агрегатные | Обрабатывают множество строк | SUM(), AVG(), COUNT() |
| Скалярные | Работают с отдельным значением | UPPER(), LEN(), ROUND() |
Пример
SELECT
COUNT(*) AS total_orders, -- агрегатная функция
MAX(order_amount) AS max_amount, -- агрегатная функция
UPPER(customer_name) AS name_upper -- скалярная функция
FROM orders
WHERE order_date > '2023-01-01';
В этом запросе агрегатные функции COUNT() и MAX() подсчитывают количество и максимальную сумму заказов, а скалярная UPPER() преобразует имена клиентов к верхнему регистру.
Что важно знать на собеседовании
- Агрегатные функции сводят множество строк к одному значению.
- Скалярные функции возвращают результат для каждой отдельной строки.
- Часто агрегатные функции используются с
GROUP BYдля группировки данных. - Знание функций помогает эффективно писать тесты для проверки корректности запросов и данных.
- Некоторые СУБД расширяют стандартный набор функций, важно понимать их особенности.
Тема: SQL и базы данных | Уровень: middle