Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Oracle / Лекции / Лек_ORAC / L89 / Формирование отчетов в SQL-PLUS.doc
Скачиваний:
49
Добавлен:
16.04.2013
Размер:
205.82 Кб
Скачать

20,’Dallas’,

30,’Chicago’,

40,’Boston’,

‘Unknown’)

FROM emp;

Пример для COALESCE.

SELECT COALESCE (nickname,

first_name,

last_name,

‘Unknown’) NAME

FROM emp;

Многострочные или групповые функции

Используются обычно в сочетании с фразой “GROUPBY”.

Относятся только к значениям не NULL.

MIN(поле) – минимальное значение поля в группе

MAX(поле) – максимальное значение поля в группе

SUM(поле) – сумма значений поля в группе

AVG(поле) – среднее значение поля в группе

STDDEV(поле) – среднеквадратичное отклонение для поля в группе

DISTINCT(поле) – числоодинаковыхзначений поля в группе

COUNT(поле) – число строк в группе, где поле неNULL

Пример: Использование конструкции GROUP BY и функции SUM.

SQL> SELECT * FROM purchase;

PRODUCT_NAME QUANTITY PURCHASE_ SAL

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

Small Widget 1 14-JUL-03 CA

Medium Wodget 75 14-JUL-03 BB

Chrome Phoobar 2 14-JUL-03 GA

Small Widget 8 15-JUL-03 GA

Medium Wodget 20 15-JUL-03 LB

Round Snaphoo 5 16-JUL-03 CA

6 Rows selected.

SQL>

SQL> SELECT product_name, SUM(quantity)

2 FROM purchase

3 GROUP BY product_name;

PRODUCT_NAME (SUM)QUANTITY

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

Chrome Phoobar 2

Medium Wodget 95

Round Snaphoo 5

Small Widget 9

SQL>

Пример: Использование нескольких групповых функций в одном операторе SELECT.

SQL> SELECT SUBSTR(product_name, 1, 15) "Product",

2 SUM(quantity) "Total Sold",

3 AVG(quantity) "Average",

4 COUNT(quantity) "Transactions",

5 MIN(quantity) "Fewest",

6 MAX quantity) "Most"

7 FROM purchase

8 GROUP BY product_name;

Product Total Sold Average Transactions Fewest Most

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

Chrome Phoobar 2 2 1 2 2

Medium Wodget 95 47.5 2 20 75

Round Snaphoo 5 5 1 5 5

Small Widget 9 4.5 2 1 8

SQL>

Примечание. Раннее говорилось, что все эти функции не учитываютNULL-значения, если же вы хотите их учесть, то перед именем поля следует поставить ключевое словоALL. Например, вызов

SELECT COUNT(mgr) FROM emp;

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

SELECT COUNT(ALLmgr) FROM emp;

вернёт общее число сотрудников. Впрочем, применение ключевого слова ALLк другим функциям (AVG,SUM,STDDEVи др.) приведёт к ошибке.

Примечание. Все упомянутые выше функции естественно учитывали повторяющиеся значения, но если вы не хотите этого, то перед именем поля следует поставить ключевое словоDISTINCT. Например, вызов

SELECT COUNT(mgr) FROM emp;

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

SELECT COUNT(DISTINCTmgr) FROM emp;

вернёт число менеджеров управляющих сотрудниками. Впрочем, смысл применения ключевого слова DISTINCTк другим функциям (AVG,SUM,STDDEVи др.) остаётся туманным.

Включение и исключение групп с помощью конструкции HAVING

Фильтрует сформированные группы на основе групповых значений (в отличие от WHERE, которая фильтрует исходные данные).

SELECT SUBSTR(product_name,1,15) “Product”,

SUM(quantity) “Total Sold”,

AVG(quantity) “Average”

COUNT(quantity) “Transaction”,

MIN(quantity) “Fewest”,

MAX(quantity) “Most”

FROM purchase

GROUP BY product_name

HAVING SUM (quantity) < 5; -- Менее 5 продаж товара

Применение функций в индексах.

В версиях Oracleниже 9i,при использовании функции на индексированном поле, такое поле считывалось из БД (будто оно не индексированное). ВOracle9iфункция применяется прямо к индексу без обращения к БД. Например, во фразе:

WHERE UPPER(ename) = ‘SMITH’

Соседние файлы в папке L89