Запросы, которые группируют данные и подводят итоги

We use cookies. Read the Privacy and Cookie Policy

Запросы, которые группируют данные и подводят итоги

Часто требуется создавать запросы, подобные следующему: "Сколько заказов поступило вчера?" При этом вас не интересует, кто оформил заказ, вы только хотите знать количество вчерашних заказов. Это можно сделать, используя запросы, группирующие итоговые функции.

Запросы с группировкой подводят итоги по одному или нескольким полям. Например, если вам интересно увидеть число заказов для каждого клиента, то нужно создать приведенный ниже запрос для таблицы tblOrder с группировкой данных по полю CustomerID.

SELECT CustomerID, COUNT(CustomerID) AS TotalOrders

FROM tblOrder

GROUP BY CustomerID

Результат выполнения такого запроса приведен ниже.

CustomerID TotalOrders 1 2 2 1 4 3 5 1 7 1 8 2  

Обратите внимание на использование предложения AS в этом выражении SQL. Оно предназначено для присвоения имени столбцу, содержащему результат итоговой функции, поскольку этот результат вычисляется, а не хранится в базе данных.

Для отображения имен клиентов вместо их идентификаторов нужно просто объединить с результатами запроса данные из таблицы tblCustomer.

SELECT tblOrder.CustomerID, FirstName, LastName

COUNT(dbo.tblOrder.CustomerID) AS TotalOrders 

FROM tblOrder INNER JOIN tblCustomer

ON tblOrder.CustomerID = tblCustomer.ID

GROUP BY FirstName, LastName, CustomerID

После выполнения такого запроса будет получен приведенный ниже результат.

CustomerID FirstName LastName TotalOrders 1 John Smith 2 2 Jill Azalia 1 4 Daisy Klein 3 5 Dave Martin 1 7 Thurston Ryan 1 8 Jane Winters 2  

В этом случае предложение GROUP BY содержит поле CustomerID вместе с объединенными полями FirstName и LastName из таблицы tblCustomer. При использовании предложения GROUP BY в него необходимо включить все поля, по которым группируются извлекаемые записи. В данном случае идентификатор клиента и его имя участвуют в группировании данных и потому присутствуют в предложении GROUP BY. (К счастью, если вы забудете выполнить эту операцию, среда Visual Studio .NET автоматически предложит вам сделать это.)