
 
 
 (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