Условия поиска групп having

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

Вывести те дни месяца, когда оборот превышал 1000 руб.

SELECT ДАТА_ДОК, SUM (КОЛ-ВО*ЦЕНА)

SUM (КОЛ-ВО*ЦЕНА)

FROM ПЕРЕМЕЩЕНИЕ

WHERE ДАТА_ДОК BETWEEN ‘1.01.2000’ AND ’31.01.2000’

GROUP BY ДАТА_ДОК

HAVING SUM (КОЛ-ВО*ЦЕНА)>1000

Вывести все идентификаторы городов, если количество клиентов из них больше трех.

SELECT IDN_ГОРОДА

FROM КЛИЕНТ

GROUP BY IDN_ГОРОДА

HAVING COUNT(*) >3

6.3 Работа с несколькими таблицами

6.3.1 Объединение при помощи оператора WHERE

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

Таблица Города

IDN НАЗВАНИЕ
  Москва Санкт-Петербург Пермь Париж

Таблица Клиент

IDN НАЗВАНИЕ(ИМЯ) IDN_ГОРОДА  
  МММ Хопер Алиса ИВС ПГТУ Рога&Копыта  

Вывести всех клиентов с указанием города.

SELECT ГОРОДА.НАЗВАНИЕ, КЛИЕНТ.НАЗВАНИЕ(ИМЯ)

FROM ГОРОДА,КЛИЕНТ

WHERE ГОРОДА.IDN=КЛИЕНТ.IDN_ГОРОДА

Результат этого запроса.

Москва Москва Санкт-Петербург Пермь Пермь МММ Хопер Алиса ИВС ПГТУ

Если бы нам нужны были клиенты только из Москвы. То этот запрос дополнился бы еще одной строкой.

AND ГОРОДА.НАЗВАНИЕ =’Москва’

В качестве упрощенного варианта этот же запрос можно записать следующим образом.

SELECT Г.НАЗВАНИЕ, К.НАЗВАНИЕ(ИМЯ)

FROM ГОРОДА Г., КЛИЕНТ К.

WHERE Г.IDN=K.IDN_ГОРОДА AND Г.НАЗВАНИЕ=’Москва’

Нас интересует на какую сумму был оборот по каждой группе товаров за какой-то промежуток времени.

SELECT ГР.НАЗВАНИЕ, SUM(П.КОЛ-ВО*П.ЦЕНА)

FROM ГРУППЫ ГР., ПЕРЕМЕЩЕНИЕ П.

WHERE ГР.IDN=П.IDN_ГРУППЫ AND П.ДАТА_ДОК

BETWEEN ‘1.02.2000’ AND ’16.03.2000’

GROUP BY ГР.НАЗВАНИЕ

HAVING SUM(П.КОЛ-ВО*П.ЦЕНА)>1000

ORDER BY SUM(П.КОЛ-ВО*П.ЦЕНА)


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



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