Базы данных

Предложения group by и having


Во многих случаях обобщающие запросы могут возвращать несколько строк, — например, при определении средней стоимости и количества прежних прокатов для каждой кассеты. Хотелось бы иметь возможность разбивать кортежи на группы и получать обобщающие значения для каждой из групп. Это делается с помощью предложения group by. Приводимый ниже запрос возвращает одну строку для каждого 1D видеокассеты. Каждая строка содержит 1D видеокассеты, среднюю стоимость и число прежних прокатов этой кассеты. В 7.3 показан результат выполнения данного запроса, select videold, avg(cost) as averageCost, count() as numRentals from PreviousRental group by videold

При использовании предложения group by возвращается одна строка для каждой группы исходных строк. В приведенном выше запросе кортежи таблицы PreviousRental группируются по videold. Внутри каждой группы все кортежи имеют одно и то же значение атрибута videold, отличающееся от значения этого атрибута в других группах.

Можно создать для каждого клиента производный атрибут numberRented таблицы Customer, соединив таблицы Customer и Rental, группировку по accountld и подсчет количества строк в каждой группе. Оператор select выполняет эту задачу.

select Customer, accountld, count() as .nuinberRented from Customer, Rental

where Customer.accountld = Rental.accountld group by Customer.accountld

Комментарии закрыты