Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практикум по ORACLE 2004 года.doc
Скачиваний:
36
Добавлен:
03.05.2015
Размер:
466 Кб
Скачать
☆

Пример. Вывод первого и последнего названия фильма из алфавитного списка всех фильмов.

SQL> SELECT MIN(namef), MAX(namef)

2 FROM film;

MIN(NAMEF) MAX(NAMEF)

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

Азазель Ледниковый период

Функции МАХ и MIN применяются к данным любого типа.

Функция COUNT

Функция COUNT имеет два формата: COUNT(*) и COUNT(выражение). Функция COUNT(*) возвращает количество всех строк в таблице, включая повторяющиеся строки и строки с неопределенными значениями.

Пример.

Вывод количества всех фильмов в базе.

SQL> SELECT COUNT(*)

2 FROM film;

COUNT(*)

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

7

В отличие от COUNT(*) функция COUNT(выражение) подсчитывает только строки с определенными значениями в столбце, описанном выражением.

Пример.

Вывод разброса стоимости проката кассет и количества наименований фильмов по каждой цене. Столбец должен иметь заголовок "количество".

SQL> select stoimost_prok, count(*) "количество"

2 from film

3 Group by stoimost_prok;

STOIMOST_PROK количество

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

20 1

…

40 4

42 2

7 строк выбрано.

Столбец, заданный в предложении GROUP BY, не обязательно должен присутствовать в предложении SELECT, но его присутствие делает результаты более осмысленными.

Пример.

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

SQL> select stoimost_prok, sum(kol)

2 from film

3 group by stoimost_prok;

STOIMOST_PROK SUM(KOL)

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

20 2

35 7

…

50 1

7 строк выбраны.

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

Если в одной и той же команде SELECT указаны как отдельные элементы данных (namef), так и групповые функции (COUNT), требуется предложение GROUP BY, описывающее эти отдельные элементы (в данном случае — namef). Если предложение GROUP BY опущено, выдается сообщение об ошибке "not a single-group group function" ("групповая функция не для единственной группы"), а под некорректно заданным столбцом появляется звездочка (*).

Пример.

SQL> SELECT namef, COUNT(regiser)

2 from film;

SELECT namef, COUNT(regiser)

*

ошибка в строке 1:

ORA-00937: групповая функция не является одногруппной

Для исправления этой ошибки следует добавить предложение GROUP BY. Теперь namef является именем группы.

SQL> SELECT namef, COUNT(regiser)

2 from film

3 GROUP BY namef;

NAMEF COUNT(REGISER)

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

Азазель 0

Ва-банк 0

…

Ледниковый период 1

8 Строк выбрано.

Любой столбец из списка SELECT, не являющийся групповой функцией, должен быть описан предложением GROUP BY.

Предложение WHERE для исключения групп не используется.

Пример.

Вывод названия фильма и средней стоимости проката для каждого наименования, где средняя стоимость проката превышает 40.

SQL> SELECT namef, AVG(stoimost_prok)

2 from film

3 where AVG(stoimost_prok)>40

4 GROUP BY namef;

where AVG(stoimost_prok)>40

*

ошибка в строке 3:

ORA-00934: групповая функция здесь не разрешена

Вместо этого для ограничения количества групп следует использовать предложение HAVING.

SQL> SELECT namef, AVG(stoimost_prok)

2 from film

3 GROUP BY namef

4 HAVING AVG(stoimost_prok)>40;

NAMEF AVG(STOIMOST_PROK)

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

Ва-банк 42

Звонок 40,3333333

Красотка 42