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

Агрегатные функции

Агрегатные функции формируют одну запись на основе нескольких (в частности, всех) сгруппированных записей источника. Сформированная запись содержит результат, возвращаемый функцией.

Функция Count

Подсчитывает число записей, возвращаемых запросом. Формат

Count(expr)

Аргумент expr – строка – имя поля, содержащего подсчитываемые данные, или выражение, содержащее имя поля. Может содержать имя функции (встроенной или определенной пользователем, но не агрегатной функции SQL). Можно подсчитывать любые данные, включая текст.

Даже если expr производит вычисления, значение поля не меняется. Функция не подсчитывает записи со значением поля Null, для его учета аргумент должен быть * – тогда подсчитываются все записи. Count(*) существенно быстрее Count(имя_поля).

Подсчет всех записей в таблице Orders:

SELECT Count(*) AS TotalOrders FROM Orders;

Если expr содержит несколько полей, то запись учитывается, когда хотя бы одно из них имеет значение (не Null). Имена разделяются &.

Подсчет числа записей в таблице Orders, в которых либо ShippedDate, либо Freight (либо оба) заданы:

SELECT Count('ShippedDate & Freight') AS [Not Null] FROM Orders;

Функцию Count можно использовать в свойстве SQL объекта QueryDef или при создании объекта Recordset, основанного на SQL запросе.

В Microsoft Access функцию Count можно использовать в построителе запросов и опрераторе SQL, в т.ч. формируемым программно, а также в вычисляемых управляющих элементах форм и отчетов. В построителе запросов она вызывается кнопкой Totals на панели Query Design. Особенно полезна в перекрестных и итоговых запросах.

Пусть имеется таблица Orders с полями OrderID и ShipCity, на основе которой создается запрос, выводящий число заказов, отправленных в каждый город. Создадим новый запрос, «перетащим» поле ShipCity в ячейку конструктора, в ячейку Total под ShipCity введем Group By. Создадим вычисляемое поле в следующей ячейке конструктора: CountOfOrders: Count(*). Ячейку Total установим в Expression. Запрос покажет число заказов, которые должны быть отправлены в каждый город. Его текст можно посмотреть в режиме SQL-просмотра:

SELECT ShipCity, Count(*) AS CountOfOrders FROM Orders GROUP BY ShipCity;

Его можно улучшить, «перетащив» поле OrderID в ячейку конструктора и выбрав Count в ячейке Total – запрос покажет число заказов, отправленных в каждый город:

SELECT ShipCity, Count(OrderID) AS CountOfOrders FROM Orders GROUP BY ShipCity;

Для вывода результата в «вычисляемом» управляюшем элементе, например, текстовом поле, нужно присвоить его свойству ControlSource значение =Count([OrderID]). Число учитываемых записей можно ограничить в свойстве Filter формы.

В следующем примере вычисляется число заказов из таблицы Orders, доставленных в United Kingdom (вызывается процедура EnumFields из примера к FROM):

Sub CountX()

Dim dbs As Database, rst As Recordset

' Modify this line to include the path to Northwind on your computer.

Set dbs = OpenDatabase("Northwind.mdb")

' Calculate the number of orders shipped to the United Kingdom.

Set rst = dbs.OpenRecordset("SELECT Count (ShipCountry)" _ & " AS [UK Orders] FROM Orders WHERE ShipCountry = 'UK';")

rst.MoveLast ' Populate the Recordset.

' Call EnumFields to print the contents of the Recordset.

' Pass the Recordset object and desired field width.

EnumFields rst, 25

dbs.Close

End Sub

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]