Бази даних-20210115T104840Z-001 / Oracle_SQL_5
.pdfТ.о. перепишем запрос А:
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)='ИВАНОВ';