Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Fondovi-lekcii.doc
Скачиваний:
23
Добавлен:
10.11.2018
Размер:
4.09 Mб
Скачать

3.2. Секція having – умова відбору груп

Якщо в результуючому наборі даних потрібно виводити підсумкові значення не для всіх груп, а лише для тих, які задовольняють певній умові, то після секції GROUP BY перед секцією ORDER BY вказується секція HAVING.

Загальний вигляд оператора SELECT описується так:

Умова відбору груп секції HAVING має вигляд:

Подібно до того, як секція WHERE використовується для відбору окремих рядків, так і секція HAVING використовується для відбору груп. Формат секції HAVING такий як і в секції WHERE, за одним дуже важливим винятком: в секції WHERE не можна вказувати агрегатних функцій.

Порядок виконання секцій в операторі SELECT такий:

  1. FROM.

  2. WHERE.

  3. GROUP BY.

  4. HAVING.

  5. SELECT.

  6. ORDER BY.

Приклад 16. Яка середня вартість замовлення для кожного працівника із тих працівників, у яких загальна вартість замовлень перевищує 3000.

SELECT Pracivnyk, AVG (Vartist)

FROM Zamovlennia

GROUP BY Pracivnyk

HAVING SUM (Vartist) > 3000

Можна вказувати різні агрегатні функції у секції SELECT і у секції HAVING.

Приклад 17. Вивести загальну кількість купленого товару (в одиницях вимірювання) для всіх тих покупців, у яких мінімальна кількість купленого товару не менше ніж 100.

SELECT Pokupets, SUM (Kilkist)

FROM Vidpusk

GROUP BY Pokupets

HAVING MIN (Kilkist) > = 100

Правила виконання SQL-запиту на вибірку із врахуванням секції HAVING:

  1. FROM.

  2. WHERE.

  3. GROUP BY.

  4. HAVING.

  5. SELECT.

  6. DOSTINCT.

  7. ORDER BY.

Приклад 18. Вивести ціну, кількість наявних на складі товарів та загальну кількість замовлених одиниць для кожної назви товару, якщо для нього загальна кількість замовлених одиниць більша, ніж 75% від кількості наявних на складі товарів.

SELECT T.Nazva, T.Cina, T.Nay_Kilkist, SUM (Z.Kilkist)

FROM Tovary T, Zamovlennia Z

WHERE Z.Kod_Tovaru = T.Kod_Tovaru AND

Z.Kod_Vyrobn = T.Kod_Vyrobn

GROUP BY T.Kod_Vyrobn, T.Kod_Tovaru,

T.Nazva, T.Cina, T.Nay_Kilkist

HAVING SUM (Z.Kilkist) > 0.75 * T.Nay_Kilkist

ORDER BY T.Nay_Kilkist DESC

3.3. Обмеження на умову відбору груп

Секція HAVING використовується для того, щоб відбирати групи рядків, тому умова відбору секції HAVING застосовується не до окремих рядків, а до групи в цілому. Це означає, що в умову відбору секції HAVING може входити 1) константа; 2) агрегатна функція, яка повертає одне значення для всіх рядків, що входять у групу; 3) стовпчик групування, який за означенням має одне й те саме значення в усіх рядках групи; 4) вираз, який складається із всіх вищевказаних елементів.

На практиці умова відбору секції HAVING завжди містить як мінімум одну агрегатну функцію. Якщо це не так, то таку умову можна і навіть буде краще перемістити у секцію WHERE.

3.4. Значення null і умова відбору груп

Як і у секції WHERE умова відбору в секції HAVING може дати один з наступних результатів: якщо умова набуває значення TRUE, то така група рядків залишається і для неї генерується один єдиний рядок таблиці результатів запиту; якщо ж умова отримує значення FALSE або NULL, то така група рядків ігнорується і для неї жодний рядок таблиці результатів не створюється.

Правила опрацювання значень NULL в умовах відбору секції HAVING такі самі, що і для секції WHERE.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]