Расчет значений вычисляемых столбцов

Для расчета значений вычисляемых столбцов результирующего НД используются арифметические выражения. При этом в списке возвращаемых столбцов после SELECT вместо имени вычисляемого столбца указывается выражение:

SELECT [DISTINCT | ALL ]

{ * | <значение1> [,<значение2> …], <выражение1>[AS <имя_столбца>] …}

FROM <таблица1> [ , <таблица2> … ]

 

Пример:

SELECT R.*, T.ZENA, R.KOLVO*T.ZENA AS STOIM

FROM RASHOD R, TOVARY T

WHERE R.TOVAR = T.TOVAR

------------------------

AS STOIM – необязательное присвоение имени вычисляемому столбцу

Агрегатные функции

Агрегатные функции предназначены для вычисления итоговых значений операций над всеми записями НД. К агрегатным относятся следующие функции:

· COUNT(<выражение>) – число вхождений выражения в результирующий НД;

· SUM(<выражение>) – суммирует значение выражения;

· AVG(<выражение>) – находит среднее значение;

· MAX(<выражение>) – определяет максимальное значение;

· MIN(<выражение>)- определяет минимальное значение.

Примеры:

SELECT COUNT(DISTINCT POKUP) AS COUNT_POKUP

FROM RASHOD;

-----------------------

SELECT SUM(R.KOLVO*T.ZENA) AS OBS_ZENA

FROM RASHOD R, TOVARY T

WHERE (R.TOVAR = T.TOVAR)

 

Группировка записей

Иногда требуется получить агрегированные значения не по всему результирующему НД, а по каждой из входящих в него групп записей, характеризующихся одинаковым значением какого-либо столбца. Для этого перед предложением WHERE вводится предложение:

GROUP BY столбец [ , столбец1 … ]

Примеры:

SELECT R.TOVAR, SUM(R.KOLVO*T.ZENA)

FROM RASHOD R, TOVARY T

WHERE R.TOVAR = T.TOVAR

GROUP BY R.TOVAR, R.DAT_RASH

---------------------------------------------------

SELECT DAT_RASH, COUNT(DISTINCT POKUP)

FROM RASHOD

GROUP BY DAT_RASH

Наложение ограничений на группировку записей

Если нужно в результирующем НД выдавать агрегацию не по всем группам, а только по группам, которые отвечают некоторому условию то после GROUP BY указывается предложение:

HAVING <агрегатная функция> <отношение> <значение>

Агрегатная функция – одна из функций MIN, MAX, AVG, SUM

Отношение – одна из операций отношения.

Значение – константа, результат вычисления выражения или единичное значение, возвращаемое вложенным оператором SELECT.

Пример:

SELECT POKUP, MIN(KOLVO)

FROM RASHOD

GROUP BY POKUP

HAVING MIN (KOLVO) >= 100

 

Отличие HAVING от WHERE:

· HAVING – исключает из результирующего НД группы с результатами агрегированных значений;

· WHERE – исключает из расчета агрегатных значений по группировкам записи, не удовлетворяющие условию;

· В условии поиска WHERE нельзя указывать агрегатную функцию.

 

3.4.1.11. Оператор SELECT: задание сложных условий поиска.

Использование логических выражений

Сложные логические выражения строятся при помощи операторов AND, OR и NOT.

Замечание:

Операторы отношения при построении выражений имеют меньший приоритет, чем логические операции, что избавляет от необходимости расстановки многочисленных скобок.

Пример:

SELECT R.*, T.ZENA

FROM RASHOD R, TOVARY T

WHERE R.TOVAR = T.TOVAR AND

(R.KOLVO <= 30 OR R.KOLVO >= 3000) AND

R.POKUP IS NOT NULL

ORDER BY R.KOLVO

Сравнение столбца с результатом вычисления выражения

<выражение> <оператор> <столбец>

или аналогичный способ

<столбец> <оператор> <выражение>

Результат вычисления выражения сравнивается содержимым указанного столбца.

Пример:

SELECT R.DAT_RASH, R.TOVAR, T.ZENA

FROM RASHOD R, TOVAR T

WHERE R.TOVAR = T.TOVAR AND T.ZENA > (120 / R.KOLVO)

ORDER BY R.DAT_RASH

Использование BETWEEN

<значение> [ NOT ] BETWEEN <значение1> AND <значение2>

Указать значение, которое должно находиться в интервале между значением1 и значением2.

Пример:

SELECT *

FROM RASHOD

WHERE KOLVO BETWEEN 1000 AND 3000

Использование IN

Если нужно, чтобы значение какого-либо столбца (или результат вычисления некоторого выражения) совпадало с одним из дискретных значений, в условии поиска указывается предложение:

<значение> [ NOT ] IN ( <значение1> [, <значение2> … ] )

В результирующий НД будут включены только те записи, для которых значение, стоящее слева от IN , равно одному из значений, указанному в списке значений.

Пример:

SELECT *

FROM RASHOD

WHERE KOLVO IN (100, 1000, 3000 )

Замечание:

Существует вторая форма использования IN, в которой список возможных значений возвращается вложенным запросом SELECT.