Выбрать главу

Функция REGEXP_COUNT() является новой функцией базы данных Oracle llg .

Функция REGEXP_COUNT(x, шаблон [.начало [,условие_совпадения]]) выполняет

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

Дополнительно можно указать необязательные параметры начало, который

указывает, с какого по счёту символа в х следует начинать поиск, и

строку уеловие_совпадения, чтобы указать условие совпадения.

В следующем примере с помощью REGEXP_COUNT() подсчитывается,

сколько раз регулярное выражение s[[:alpha:]] {3 } встречается в строке:

□ SELECT

REGEXP_COUNT('But, soft! What light through yonder window breaks?’,

’s[[:alpha:]]< 3 }’ ) AS result

FROM dual;

RESULT

2 ,

Обратите внимание возвращено число 2; это означает, что для регулярного

выражения в данной строке есть два совпадения.

Использование простых функций 123

Использование агрегатных функций

Функции, рассмотренные до сих пор, оперировали с одной строкой и для

каждой поступающей на вход строки возвращали одну строку выходных

данных. В этом разделе описываются так называемые агрегатные функции,

которые оперируют целыми группами строк и для каждой такой группы

строк возвращают всего одну выходную строку.

Примечание Агрегатные функции иногда называют групповыми функциями, так как они

оперируют группами строк.

В таблице 4.8 перечислены некоторые из агрегатных функций. Возвращаемое

значение для всех этих функций относится к типу данных NUMBER.

Ниже приводятся некоторые замечания, о которых не следует забывать

при использовании агрегатных функций.

■ Вы можете использовать агрегатные функции с любым допустимым

выражением. Например, функции COUNT(), МАХ() и MIN() можно использовать

для чисел, строк и данных типа дата-время.

■ Агрегатные функции игнорируют пустые значения, потому что пустые

значения указывают на то, что значение этой строки неизвестно

и поэтому не может быть использовано при вычислении агрегатных

функций.

■ Для исключения дублированных записей при вычислении агрегатных

функций можно использовать ключевое слово DISTINCT.

Вы узнаете больше о некоторых агрегатных функциях, показанных в

таблице 4.8, в следующих разделах. В Главах 7 и 8 вы узнаете, как использовать

эти функции совместно с операторами ROLLUP и RETURNING выражения

SELECT. Как вы увидите, ROLLUP позволяет получить промежуточное значение

для группы строк, где промежуточное значение вычисляется с использованием

одной из агрегатных функций; RETURNING позволяет вам сохранять

значение, переданное агрегатной функцией, в переменной.

Таблица 4.8. Агрегатные функции

Функция Описание

AVG(x) Возвращает среднее значение х.

COUNT(x) Возвращает число строк, возвращаемых запросом, в котором участвует х.

МАХ(х) Возвращает максимальное значение х.

MEDIAN(x) Возвращает медиану х.

MIN(x) Возвращает минимальное значение х.

STODEV(x) Возвращает стандартное отклонение х.

SUM(x) Возвращает сумму значений х.

VARIANCE(x) Возвращает дисперсию х.

124 Глава 4

AVG()

Функция AVG(x) используется для вычисления среднего значения х. В следующем

примере вычисляется средняя цена товаров; заметьте, что функции

AVG() передается весь столбец price таблицы products:

□ SELECT AVG(price)

FROM products;

AVG(PRICE)

19.7308333

Агрегатные функции можно использовать и с любыми допустимыми

выражениями. Например, в следующем запросе функции AVG() передается

выражение price + 2; при этом к значению каждой строки столбца price

таблицы products добавляется число 2, после чего для полученных значений

вычисляется среднее.

□ SELECT AVG(price + 2)

FROM products;

AVG(PRICE)

21.7308333

Для исключения из групповых вычислений идентичных значений используется

ключевое слово DISTINCT. В следующем примере DISTINCT используется

для исключения повторяющихся строк в столбце price при вычислении

среднего значения с помощью функции AVG():

□ SELECT AVG(DISTINCT price)

FROM products;

AVG(DISTINCTPRICE)

20.2981818

Среднее значение в этом примере немного больше среднего значения,

вычисленного в первом примере, где не было включено ключевое слово

DISTINCT. Это происходит потому, что в столбце price содержится два одинаковых

значения цены: 13.49 для товаров № 7 и № 12. В результате значение

столбца price для товара № 12 считается повторяющимся и исключается

из вычислений, проводимых функцией AVG(), что и приводит к возникновению

разницы между средними значениями.

C O U N T ( )

Функцию COUNT(x) можно использовать для подсчета количества строк,