Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

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




Стандартом SQL определено, что при проведении группирования все отсутствующие значения рассматриваются как равные. Если две строки таблицы в одном и том же группируемом столбце содержат значение NULL и идентичные значения во всех остальных непустых группируемых столбцах, они помещаются в одну и ту же группу.

 

Пример:

SELECT R1.Дисциплина, COUNT(*)

FROM R1

GROUP BY R1.Дисциплина

Результат:

Дисциплина COUNT(*)
Базы данных  
Теория информации  
Сети и телекоммуникации  
Английский язык  

 

Можно сосчитать количество сдавших экзамен по какой-либо дисциплине, исключив неопределенные значения из исходного отношения перед группировкой. В этом случае запрос будет выглядеть следующим образом:

SELECT R1.Дисциплина, COUNT(*)

FROM R1

WHERE R1.Оценка IS NOT NULL

GROUP BY R1.Дисциплина

 

Результат:

Дисциплина COUNT(*)
Базы данных  
Теория информации  
Сети и телекоммуникации  
Английский язык  

Примечание: ALL - Включает все группы и результирующие наборы (даже не имеющие строк), которые удовлетворяют условию поиска заданного в предложении WHERE.

Если задан аргумент ALL, для сводных столбцов групп, не удовлетворяющие условию поиска, возвращаются значения NULL.

 

Пример:

USE AdventureWorks;

GO

SELECT ProductID, AVG(UnitPrice) AS 'Average Price'

FROM Sales.SalesOrderDetail

WHERE OrderQty > 10

GROUP BY ProductID

ORDER BY ProductID;

GO

Результат:

 

USE AdventureWorks;

GO

SELECT ProductID, AVG(UnitPrice) AS 'Average Price'

FROM Sales.SalesOrderDetail

WHERE OrderQty > 10

GROUP BY ALL ProductID

ORDER BY ProductID;

GO

 

Пример. Вычислить средний объем покупок (функция Avg), совершенных каждым покупателем (GROUP BY Клиент.Фамилия).

SELECT Клиент.Фамилия, Avg(Сделка.Количество)

AS Среднее_количество

FROM Клиент INNER JOIN Сделка

ON Клиент.КодКлиента=Сделка.КодКлиента

GROUP BY Клиент.Фамилия

Пример. Определить, на какую сумму был продан товар каждого наименования.

SELECT Товар.Название,

Sum(Товар.Цена*Сделка.Количество)

AS Стоимость

FROM Товар INNER JOIN Сделка

ON Товар.КодТовара=Сделка.КодТовара

GROUP BY Товар.Название

 

Пример. Подсчитать количество сделок, осуществленных каждой фирмой.

SELECT Клиент.Фирма, Count(Сделка.КодСделки)

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...