Главная Обратная связь

Дисциплины:






Устранение повторяющихся значений



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

DISTINCT

Пример:

SELECT DISTINCT TOVAR

FROM RASHOD

Замечание:

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

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

Для расчета значений вычисляемых столбцов результирующего НД используются арифметические выражения. При этом в списке возвращаемых столбцов после 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: задание сложных условий поиска.





sdamzavas.net - 2019 год. Все права принадлежат их авторам! В случае нарушение авторского права, обращайтесь по форме обратной связи...