Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД7.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
38.06 Кб
Скачать

Группировка записей

Когда требуется получать агрегированные (итоговые) данные не по всему результирующему набору данных (НД), а по каждой из входящих в него групп записей, которые характеризуются одинаковым значением какого-либо столбца, после предложения WHERE вводится предложение GROUP BY

GROUP столбец1, столбец2…

При этом необходимо, чтобы один из столбцов возвращаемых оператором SELECT был представлен агрегатной функцией.

#1 Найти сред цену каждого товара

Select Name_tovar, avg (price)//сред значение столбца цена

From Tovar

Group by name_tovar

#2 Выдать общую стоимость каждого товара

Select Name_tovar, sum (price*kolvo) as TotalCost//столбец с общей стоимотью будет иметь имя TotalCost

From Tovar

Group by name_tovar

#3 Выдать общую стоимость товаров, поступивших на каждую дату, цена которых превышает 1000

Пусть в таблице товар Tovar есть поле дата поступления Data_in

Select data_in, sum (price*kolvo) as TotalCost

From Tovar

Where price >1000

Group by Data_in

Наложение ограничений на группировку записей

Если необходимо выдавать итоговые данные не по всем группам записей, а только по тем из них, которые удовлетворяют некоторому условию, то после GROUP BY указывают

HAVING <агрегатная функция – count,sum,max,min,avg> <отношение – это <=,>=,!= и т.д.> <значение – выражение вычисляемое или константа или вложенный оператор select который вернет одно значение>

В предложении HAVING обязательно должна присутствовать агрегатная функция, которую нельзя использовать в предложении WHERE

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

Select Data_in, count(*)//все записи считаем count – это функция– сколько всего товара, количество поступивших

From tovar

Where kolvo>500

Group by Data_in

Having count(*)>1

Name_tovar

Data_in

Kolvo

1

23.10.16

700

2

25.10.16

300

3

23.10.16

1020

4

25.10.16

650

В результате запроса получим

Name_tovar

Data_in

Kolvo

1

23.10.16

700

2

25.10.16

300

3

23.10.16

1020

25.10.16

650

На 23.10.16 – 2 записи

На 5.10.16 - 1 запись

Учитываем только те, где число больше 1.

  1. Задание сложных условий поиска

IS NULL

Если требуется выдавать записи столбец которых имеет либо не имеет пустое значение, применяется предложение

<значение-столбец> IS [NOT] NULL

#5 Выдать наименование товаров для которых не указано количество

Select nametovar from Tovar

Where kolvo is null

  1. Использование логических выражений

OR, AND, NOT

#6

Select * from Tovar

Where kolvo>100 and kolvo<=1000 and price=1000

Пусть есть таблица «Расход товара» она связана с таблицей «Товар» по внешнему ключу nametoval. Хранит название товара и его кол-во

Rashod

ID_rashod

Kolvo_R

Nametovar(fk)

Data_R