SQL позволяет выполнять различные арифметические операции над столбцами результирующего отношения. В конструкции <список_выбора> можно использовать константы, функции и их комбинации с арифметическими операциями и скобками.
Например, чтобы узнать, сколько лет прошло с 1992 года (год принятия стандарта SQL-92) до публикации той или иной книги можно выполнить команду:
SELECT title, yearpub-1992 FROM titles WHERE yearpub > 1992;
В арифметических выражениях допускаются операции сложения (+), вычитания (-), деления (/), умножения (*), а также различные функции (COS, SIN, ABS – абсолютное значение и др.).
В SQL также определены агрегатные функции, которые выполняют действия над группой одинаковых записей. Среди них выделяют:
· AVG(<имя поля>) - среднее по всем значениям данного поля
· COUNT(<имя поля>) или COUNT (*) - число строк
· MAX(<имя поля>) - максимальное из всех значений данного поля
· MIN(<имя поля>) - минимальное из всех значений данного поля
· SUM(<имя поля>) - сумма всех значений данного поля
Следует учитывать, что каждая агрегирующая функция возвращает единственное значение.
Примеры:
определить дату публикации самой "древней" книги в базе данных
SELECT MIN(yearpub) FROM titles;
подсчитать количество книг в базе данных:
SELECT COUNT(*) FROM titles;
Область действия данных функции можно ограничить с помощью логического условия.
Например.
Найти количество книг, выпущенных после 2000 года:
SELECT COUNT(*) FROM titles WHERE yearpub > 2000;
При ограничении данных полученных в результате применения агрегатных функций нужно использовать параметр HEVING, выполняющий те же функции что и параметр WHERE, но только с вычисленными значениями. Кроме этого, как правило, на практике группировка данных для применения агрегатной функции некоторого атрибута производится относительно другого атрибута. В этом случае необходимо использовать параметр GROUP BY для группировки данных, относительно которых будет выполняться операция агрегатной функции.
Например:
Найти книги, количество которых после 2000 года превысило 100000 экземпляров
SELECT title, COUNT(yearpub) AS Количество
FROM titles WHERE yearpub > 2000
GROUP BY title
HEVING COUNT(yearpub)>100000;
Если в запросе необходимо выполнить сортировку данных необходимо использовать параметр ORDER BY с указанием атрибута, по которому выполняется сортировка. Можно выполнять сортировку в двух направлениях: по возрастанию – параметр ASC (выполняется по умолчанию) и по убыванию – параметр DESC.
Например:
Реализовать предыдущий запрос и при этом отсортировать название книг в обратном алфавитном порядке.