- •Выборка данных
- •Оператор select
- •Выражения sql
- •Выражение from
- •Операции left join, right join
- •Операция inner join
- •Выражение in
- •Предикаты all, distinct, distinctrow, top
- •Объявление with owneraccess option
- •Выражение where
- •Операция Like
- •Операция In
- •Операция Between...And
- •Подзапрос
- •Выражение order by
- •Выражение group by
- •Выражение having
- •Оператор union
- •Оператор transform
- •Выражение procedure
- •Объявление parameters
- •Изменение данных
- •Оператор update
- •Оператор insert into
- •Оператор delete
- •Изменение структуры
- •Оператор select...Into
- •Оператор create table3
- •Выражение constraint4
- •Оператор alter table5
- •Оператор create index6
- •Оператор drop7
- •Агрегатные функции
- •Функция Count
- •Функция Avg
- •Функция Sum
- •Функции Var и VarP
- •Функции StDev и StDevP
- •Функции Min, Max
- •Функции First, Last
Агрегатные функции
Агрегатные функции формируют одну запись на основе нескольких (в частности, всех) сгруппированных записей источника. Сформированная запись содержит результат, возвращаемый функцией.
Функция 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
