Перейти к содержанию

Введение

В реальных информационных системах данные редко используются «как есть».
Чаще всего требуется:

  • рассчитать итоговые значения;
  • выполнить перерасчёт показателей;
  • получить производные данные (проценты, коэффициенты, средние значения);
  • сформировать аналитический отчёт.

SQL позволяет выполнять вычисления непосредственно в запросе, без изменения данных в таблице.
Это делает запросы мощным инструментом анализа.

Важно понимать:

Вычисления в SELECT формируют временный результат и не изменяют данные в таблице, если не используется UPDATE.


Типы вычислений в SQL

В SQL можно выполнять следующие виды вычислений:

  1. Арифметические операции;
  2. Логические выражения;
  3. Агрегатные вычисления;
  4. Условные вычисления (CASE);
  5. Вычисления с использованием встроенных функций;
  6. Вычисления с обработкой 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 используется в условии отбора групп.


Ограничения и частые ошибки

  1. Деление на ноль вызывает ошибку.
  2. Псевдоним нельзя использовать в WHERE.
  3. Вычисления не изменяют таблицу.
  4. Необходимо учитывать типы данных (например, деление целых чисел).
  5. NULL может неожиданно влиять на результат.

Практическое значение вычислений

Вычисления в SQL применяются:

  • при формировании отчётов;
  • в аналитике продаж;
  • в расчёте заработной платы;
  • в статистике (средние, максимум, минимум);
  • в системах управления учебным процессом;
  • в финансовых и бухгалтерских системах.

Итоги

  • SQL позволяет выполнять сложные вычисления непосредственно в запросе.
  • Вычисления могут быть арифметическими, агрегатными, условными.
  • GROUP BY позволяет применять вычисления к группам данных.
  • NULL требует отдельной обработки.
  • Вычисляемые столбцы существуют только в результате запроса.