(p.date_prihod = "04.10.00");
8.9 Группировка записей
Для группы записей столбца, характеризующие одинаковые значения можно получить агрегиро-
ванные значения (min, max, avg). При этом один из столбцов представляется агрегирующей функцией, и
предложение group by столбец [, столбец…] перед предложением where.
Например, получить общее количество прихода деталей по каждой из них:
Select p.name_det sum (p.kolvo) as priem
from prihod p
group by p.name_det;
Или общая цена на каждую деталь на каждую дату:
Select p.name_det, p.date_prihod, sum (p.kolvo * d.zena_ed) as sum
from prihod p, detal d
where p.name_det = d.name_det
group by p.name_det, p.date_prihod;
8.10 Предложение having
Наложение ограничений на группировку записей.
Агрегация выдается только по группам удовлетворяющим условию.
Формат: после group by
Having <агрег_функц> <отношение> <значение>
Агрег_функц – min, max, avg, sum;
Отношение – =, <>, <, <=, >=;
Значение – константа, результат вычисления или единичное значение, возвращенное se-
lect.
Найти минимальный приход товара (деталей) не меньше 100 единиц.
Select name_det, min (kolvo)
from prihod
group by name_det
having min (kolvo) >=100;
Можно задавать разные функции для столбца и условия having.
В условие where нельзя вносить агрегированную функцию.
Where – исключает не удовлетворяющие условию.
Having – исключает группы с агрегированными значениями.
8.11 Использование подзапросов
Часто невозможно решить поставленную задачу путем использования единственного запроса. На-
пример, в тех случаях, когда при использовании условия поиска в предложении where значение с кото-
рым надо сравнить, далее не определено, а вычисляется оператором select.
В таких случаях применяют вложенные запросы или подзапросы.
Оператор select имеет вид:
Select …
from …
where <сравниваемое значение> <оператор> (select);
Пусть надо найти дату, на которую приходится максимальный приход деталей. Тогда запрос может
быть записан так:
Select kolvo, date_prihod
где:
Name_det Priem
D1 500
D2 400
D3 110
Name_det Date_prihod Sum
D1 20.09.00
D1 29.09.00
D2 1.10.00
D1 1.10.00
D2 2.10.00
D1 4.10.00
D3 4.10.00
Name_det Min
D1 100
D2 200
D3 110
Kolvo Date_prihod
200 1.10.00
200 2.10.00