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

Отбор групп строк (предложение HAVING)

Точно так же, как предложение WHERE используется для отбора отдельных строк, участвующих в запросе, предложение HAVING используется для отбора групп строк, созданных предложением GROUP BY.

Синтаксис:

HAVING <условие отбора групп строк>

В предложении HAVING используются такие же типы условий, как и в предложении WHERE. Кроме того, учитывая, что условие в предложении HAVING применяется к группе строк, в нем можно использовать агрегатные функции, столбцы группировки, константы, а также выражения, состоящие из перечисленных элементов.

На практике условие в предложении HAVING всегда должно включать в себя как минимум одну агрегатную функцию. Если это не так, условие поиска нужно переместить в предложение WHERE.

Примечание. Все имена столбцов из предложения HAVING, которые не используются как аргументы агрегатных функций, должны быть обязательно указаны в предложении GROUP BY!!!

Пример 41. Вывести список мелодий, которые установлены более чем для одного контакта.

SELECT M.NAZV, COUNT(*)

FROM MELODII M, KONTAKTY K

WHERE (M.ID=K.MEL_ID)

GROUP BY M.ID, M.NAZV

HAVING COUNT(*)>1

Пример 42. Вывести информацию о контактах (имя, количество вызовов, общая длительность), разговоры с которыми (без учета пропущенных) длились в среднем более 1 минуты).

SELECT K.NAME1, COUNT(*), SUM(DLIT)

FROM KONTAKTY K, NOMERA N, VYZOVY V, TIPY_VYZ T

WHERE (K.ID=N.KONT_ID) AND (N.ID=V.NOMER_ID) AND (V.TIP_ID=T.ID)

AND (T.NAZV<>'Пропущенный')

GROUP BY K.ID, K.NAME1

HAVING AVG(DLIT)>60

1. Из всех таблиц, указанных в предложении FROM, сформировать одну общую таблицу как декартово произведение (или соединение при наличии операции JOIN).

2. Если имеется предложение WHERE, применить заданное в нем условие отбора к каждой строке общей таблицы и оставить только те строки, для которых это условие выполняется (TRUE), остальные строки отбросить.

3. Если имеется предложение GROUP BY, разделить оставшиеся строки на группы таким образом, чтобы в строках каждой группы были одинаковые значения во всех столбцах группировки.

4. Если имеется предложение HAVING, применить заданное в нем условие поиска к каждой группе строк и оставить только те группы строк, для которых это условие выполняется.

5. Для каждой из оставшихся строк (при наличии группировки – для каждой из групп строк) вычислить значение каждого элемента в списке возвращаемых столбцов (предложение SELECT) и создать одну строку таблицы результатов запроса.

6. Если указано ключевое слово DISTINCT, удалить из таблицы результатов запроса все повторяющиеся строки.

7. Если имеется предложение ORDER BY, отсортировать результаты запроса.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: