Підлеглий запит обчислює середню вартість всіх замовлень. Це – звичайний підлеглий запит, який не містить зовнішніх звертань, тому це середня вартість обчислюється один раз, а потім багатократно використовується в секції HAVING. Головний запит переглядає всі рядки таблиці, утвореної в результаті з’єднання таблиць Pracivnyky і Zamovlennia на основі співпадання значень в стовпчиках Kod_Pracivnykа (із таблиці Pracivnyky) та Prodavec (із таблиці Zamovlennia) при цьому відбираються рядки, що стосуються замовлень на товари виробника з кодом 1001.
Результуюча таблиця групується за прізвищами працівників, потім секція HAVING порівнює середню вартість замовлень по кожній групі із середньою вартістю по всім замовленням, обчисленою на самому початку.
Якщо середня вартість по групі більша, ніж загальна середня вартість, то така група рядків зберігається, якщо – ні, то ця група вилучається.
Нарешті, секція SELECT створює для кожної групи підсумковий рядок, який містить прізвище працівника і середню вартість прийнятих ним замовлень на товари виробника 1001.
В секції HAVING можна також використовувати корельовані підлеглі запити; при цьому, оскільки підлеглий запит виконується лише один раз для кожної групи рядків, то всі зовнішні звертання в корельованому підлеглому запиті повинні мати одне значення для кожної групи рядків.
На практиці це означає, що зовнішнє звертання повинно бути або звертанням до стовпчика групування зовнішнього запиту, або міститися в аргументі статистичної функції. В останньому випадку значення такої статистичної функції обчислюється при виконанні підлеглого запиту.
104). Вивести список працівників, в яких середня вартість замовлень на товари, виробником з кодом 1001, більша, ніж середня вартість всіх замовлень даного працівника.
104). SELECT Prizv, AVG (Vartist)
FROM Pracivnyky, Zamovlennia
WHERE Kod_Pracivnykа = Prodavec
AND Vyrobnyk = 1001
GROUP BY Prizv, Kod_Pracivnykа пояснити чому?
HAVING AVG (Vartist) >
(SELECT AVG (Vartist)
FROM Zamovlennia
WHERE Prodavec = Kod_Pracivnykа)
- підлеглий запит повинен обчислити середню вартість працівника, група рядків якого перевіряється в даний момент секцією HAVING.
Підлеглий запит відбирає замовлення, прийняті цим працівником, за допомогою зовнішнього звертання Kod_Pracivnykа. Це зовнішнє звертання – правильне, бо стовпчик Kod_Pracivnykа має однакові значення у всіх рядках групи, створеної головним запитом (тому цей стовпчик включено у перелік стовпчиків групування).