Функция 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) можно использовать для подсчета количества строк,