Введение
В реальных информационных системах данные редко используются «как есть».
Чаще всего требуется:
- рассчитать итоговые значения;
- выполнить перерасчёт показателей;
- получить производные данные (проценты, коэффициенты, средние значения);
- сформировать аналитический отчёт.
SQL позволяет выполнять вычисления непосредственно в запросе, без изменения данных в таблице.
Это делает запросы мощным инструментом анализа.
Важно понимать:
Вычисления в
SELECTформируют временный результат и не изменяют данные в таблице, если не используетсяUPDATE.
Типы вычислений в SQL
В SQL можно выполнять следующие виды вычислений:
- Арифметические операции;
- Логические выражения;
- Агрегатные вычисления;
- Условные вычисления (CASE);
- Вычисления с использованием встроенных функций;
- Вычисления с обработкой NULL.
Арифметические операции
SQL поддерживает базовые математические операторы:
| Оператор | Назначение |
|---|---|
+ |
сложение |
- |
вычитание |
* |
умножение |
/ |
деление |
% |
остаток от деления |
1. Простые вычисления
SELECT price, quantity, price * quantity AS total_cost
FROM Products;
В результате появляется вычисляемый столбец total_cost.
2. Сложные выражения
Можно объединять несколько операций:
SELECT price,
discount,
(price - discount) * quantity AS final_sum
FROM Products;
Использование скобок помогает явно задать порядок выполнения.
3. Проценты и коэффициенты
SELECT salary,
salary * 0.13 AS tax,
salary - salary * 0.13 AS net_salary
FROM Employees;
Такие вычисления часто используются в бухгалтерских и финансовых системах.
Вычисления с текстовыми и датами
SQL позволяет выполнять операции и над другими типами данных.
1. Конкатенация строк
SELECT first_name || ' ' || last_name AS full_name
FROM Students;
Операция объединения двух или более текстовых значений (полей, литералов) в одну общую строку. Она используется для форматирования вывода, объединения данных из разных столбцов (например, Имя + Фамилия) или добавления префиксов/суффиксов
(В MariaDB используется CONCAT())
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM Students;
2. Вычисления с датами
SELECT birth_date,
YEAR(CURDATE()) - YEAR(birth_date) AS age
FROM Students;
Позволяет вычислить возраст на основе даты рождения.
Агрегатные вычисления
Агрегатные функции выполняют вычисления над группой строк.
| Функция | Назначение |
|---|---|
COUNT() |
количество |
SUM() |
сумма |
AVG() |
среднее |
MIN() |
минимум |
MAX() |
максимум |
Пример:
SELECT SUM(price) AS total_revenue
FROM Orders;
Вычисления с GROUP BY
При использовании GROUP BY вычисления выполняются для каждой группы.
SELECT category,
SUM(price) AS total_sum,
AVG(price) AS average_price
FROM Products
GROUP BY category;
Каждая строка результата — отдельная группа.
Условные вычисления (CASE)
CASE позволяет реализовать логику ветвления.
SELECT name,
score,
CASE
WHEN score >= 90 THEN 'Отлично'
WHEN score >= 70 THEN 'Хорошо'
WHEN score >= 50 THEN 'Удовлетворительно'
ELSE 'Не сдал'
END AS result
FROM Students;
CASE может использоваться:
- в SELECT;
- в ORDER BY;
- в GROUP BY (в сложных запросах).
Работа с NULL в вычислениях
NULL означает отсутствие значения.
Любая арифметическая операция с NULL возвращает NULL.
SELECT price * quantity
FROM Products;
Если quantity = NULL, результат будет NULL.
Для обработки используются:
IFNULL
IFNULL(значение, замена) — функция, которая:
- проверяет значение;
- если оно равно NULL → возвращает указанную замену;
- если не NULL → возвращает само значение.
Синтаксис (MariaDB / MySQL)
IFNULL(выражение, значение_по_умолчанию)
Пример
SELECT price * IFNULL(quantity, 0) AS total FROM Products;
Здесь:
- если quantity = NULL,
- вместо него подставляется 0,
- вычисление выполняется корректно.
COALESCE
COALESCE() — более универсальная функция.
Она возвращает первое НЕ-NULL значение из списка аргументов.
Синтаксис
COALESCE(значение1, значение2, ..., значениеN)
SQL проверяет аргументы слева направо и возвращает первое значение, которое не равно NULL.
Простой пример
SELECT COALESCE(quantity, 0) FROM Products;
Если quantity = NULL, будет возвращено 0.
Более сложный пример
SELECT COALESCE(discount_price, regular_price, 0) AS final_price FROM Products;;
Логика: 1. Если есть скидочная цена → использовать её. 2. Если её нет → использовать обычную цену. 3. Если и её нет → вернуть 0.
Использование выражений в ORDER BY
Можно сортировать по вычисляемым значениям.
SELECT name, price * quantity AS total
FROM Orders
ORDER BY total DESC;
Использование выражений в HAVING
SELECT category, COUNT(*) AS cnt
FROM Products
GROUP BY category
HAVING COUNT(*) > 5;
Здесь вычисление COUNT используется в условии отбора групп.
Ограничения и частые ошибки
- Деление на ноль вызывает ошибку.
- Псевдоним нельзя использовать в WHERE.
- Вычисления не изменяют таблицу.
- Необходимо учитывать типы данных (например, деление целых чисел).
- NULL может неожиданно влиять на результат.
Практическое значение вычислений
Вычисления в SQL применяются:
- при формировании отчётов;
- в аналитике продаж;
- в расчёте заработной платы;
- в статистике (средние, максимум, минимум);
- в системах управления учебным процессом;
- в финансовых и бухгалтерских системах.
Итоги
- SQL позволяет выполнять сложные вычисления непосредственно в запросе.
- Вычисления могут быть арифметическими, агрегатными, условными.
- GROUP BY позволяет применять вычисления к группам данных.
- NULL требует отдельной обработки.
- Вычисляемые столбцы существуют только в результате запроса.