Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
1
Добавлен:
15.01.2021
Размер:
154.95 Кб
Скачать

Т.о. перепишем запрос А:

SELECT Building

FROM ROOM

GROUP BY Building

HAVING SUM(Seats) > 100;

BUILDING

--------

6

Уникальность условия на группе (1)

Запрос. Выдать номера тех корпусов, суммарное количество мест аудиторий которых превышает 100. Причем суммировать места следует по аудиториям с количеством мест, превышающим 30.

SELECT Building FROM ROOM GROUP BY

Building HAVING Seats > 30 AND SUM(Seats) > 100;

HAVING Seats > 30 AND SUM(Seats) > 100 *

Ошибка в строке 4: ORA-00979: выражение не является выражением GROUP BY

Уникальность условия на группе (2)

SELECT Building

FROM ROOM

WHERE Seats > 30

GROUP BY Building

HAVING SUM(Seats) > 100;

BUILDING

--------

6

Сортировка результирующих строк

Синтаксис этой фразы следующий:

ORDER BY спецификация_сортировки_1 [,спецификация_сортировки_2]…

где спецификация сортировки имеет следующий вид:

выражение_сортировки [порядок_сортировки] [сортировка_NULL]

Сортировка результирующих строк

Сортировка по столбцу

Сортировка по выражению над столбцами

Сортировка по столбцу, отсутствующему в результирующей таблице

Порядок сортировки

Запрос. Вывести фамилии преподавателей–ассистентов и дату их приема на работу в порядке возрастания даты.

SELECT Name, HireDate FROM TEACHER

WHERE LOWER(Post) = 'ассистент' ORDER

BY HireDate ASC;

NAME HIREDATE

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

Козлитин 04.07.2001 Воробьев 02.09.2002 Марченко 22.10.2002

Витковский 01.09.2003

• 4 строк выбрано.

ДОМАШНЕЕ ЗАДАНИЕ. В.15

1.Агрегатные функции на одной таблице

2.Агрегатные функции с учетом нескольких таблиц

3.NULL в агрегатных функциях, DISTINCT, выражения в аргументе агрегатной ф-ции

4.GROUP BY (группирование по одному или нескольким столбцам)

5.Выражения в GROUP BY

6.Фраза ORDER BY

1. Агрегатные функции на одной таблице

Вывести минимальное количество студентов в группе, максимальное количество студентов в группе, среднее количество студентов в группе и суммарное количество студентов во всех группах, разделенное на количество групп. Столбцы результирующей таблицы должны иметь имена:

-МИН группа

-МАКС группа

-Средняя группа

-Вычисленное среднее

SELECT MIN(Quantity)

AS "МИН группа",

MAX(Quantity)

AS "МАКС группа",

AVG(Quantity)

AS "Средняя группа",

SUM(Quantity)/COUNT(*) AS "Вычисленное среднее"

FROM SGROUP

2. Агрегатные функции с учетом нескольких

таблиц

Вывести количество подчиненных у преподавателя, у которого один из подчиненных является Петров

SELECT COUNT(DISTINCT sub2.TchPK) AS

"Кол-во подчиненных у Петрова"

FROM TEACHER sup, TEACHER sub1, TEACHER sub2

WHERE sup.TchPK=sub1.ChiefFK AND sup.TchPK=sub2.ChiefFK AND UPPER(sub1.Name)='ПЕТРОВ';

3. NULL в агрегатных функциях, DISTINCT, выражения в аргументе агрегатной ф-ции

Вывести среднюю зарплату всех преподавателей факультета, деканом которого является Иванов, заменяя ставку или надбавку на 0, если ее значение равно NULL. Вычисленную среднюю зарплату округлить с отбрасыванием дробной части.

SELECT ROUND (SUM (NVL(t.Salary,0) + NVL(t.Commission,0)))

FROM TEACHER tdean, FACULTY f, DEPARTMENT d, TEACHER t

WHERE tdean.TchPK=f.DeanFK AND f.FacPK=d.FacFK AND d.DepPK=t.DepFK AND UPPER(tdean.Name)='ИВАНОВ';