Escolar Documentos
Profissional Documentos
Cultura Documentos
Aula 4 4328: Agrupando e Resumindo Dados Funes de agregao Resumindo dados agrupados
Funes de Agregao
Usando funes de agregao Funes de agregao com valores NULL
Funes de agregao
A partir de uma lista de valores a funo efetua um clculo e retorna um nico valor Funes de agregao ignoram valores NULL
Exceto COUNT(*)
Funes de agregao so usadas apenas na lista de valores da clusula SELECT ou como uma subconsulta
3
DISTINCT
Inclui apenas valores distintos (diferentes entre si)
expressao
Qualquer valor do tipo nmero, exceto BIT
Exemplo: AVG
USE AdventureWorks; GO SELECT AVG(VacationHours) AS 'Horas de Descanso', SUM(SickLeaveHours) AS 'Horas Doente' FROM HumanResources.Employee WHERE Title LIKE 'Vice President%'; GO
5
COUNT(DISTINCT exp)
Conta e retorna a quantidade de valores distintos no NULL em exp. exp.
exp
Expressao de qualquer tipo de dado, exceto UNIQUE, IDENTIFIER, TEXT, IMAGE, NTEXT
Exemplos COUNT
COUNT(DISTINCT expressao)
USE AdventureWorks; GO SELECT COUNT(DISTINCT Title) FROM HumanResources.Employee; GO
COUNT(*)
USE AdventureWorks; GO SELECT COUNT(*) AS 'Total de Registros' FROM HumanResources.Employee; GO
7
Funo MAX
Sintaxe: MAX(ALL||DISTINCT expressao) Comando DISTINCT no significante Retorna, o valor mximo contido em expresso. expressao
Constante, nome de coluna ou expresso
Funo MIN
Sintaxe: MIN(ALL||DISTINCT expressao) O comando DISTINCT no significante Retorna, o valor mnimo contido em expresso. expresso. expressao
Constante, nome de coluna ou expresso
Exemplo MAX
USE AdventureWorks; GO SELECT MAX(TaxRate)AS 'Mximo' FROM Sales.SalesTaxRate; GO
10
Funo SUM
S pode ser usada com valores do tipo nmero Sintaxe: SUM(ALL||DISTINCT expressao) Retorna a soma dos valores contidos em expressao. expressao.
11
Exemplo SUM
USE AdventureWorks; GO SELECT Color, SUM(ListPrice) AS 'Total de Preo', SUM(StandardCost) AS 'Custo Total' FROM Production.Product WHERE Color IS NOT NULL AND ListPrice != 0.00 AND Name LIKE 'Mountain%' GROUP BY Color ORDER BY Color; GO
12
13
Exemplo: COUNT(*)
O COUNT conta todas as linhas, independente de valores NULL. Exemplo:
USE AdventureWorks; GO SELECT COUNT(*) AS [Contador de Linhas] FROM Production.Product; GO --Retorno: 504 --Retorno:
15
17
ALL
Retorna o agrupamento de todas as linhas que atendem a comparao (onde a comparao e positiva) Valores NULL so agrupados nas condies onde o critrio de comparao negativo. Pode ser usado apenas quando o comando inclui WHERE No pode ser usado quando a clausula GROUP BY inclui CUBE ou ROLLUP
18
ROLLUP
Cria apenas um nvel de agregao (Subtotal) por linha ou por coluna
CUBE
Cria mais de um nvel de agregao (Subtotal) por linha e por coluna
19
Exemplo1: GROUP BY
USE AdventureWorks; GO SELECT Size, AVG(ListPrice) AS 'Preo Mdio' FROM Production.Product GROUP BY Size ORDER BY Size; GO Obs: Tire a funo de agregao (o cdigo no funciona sem ela)
Coloque a funo de agregao de volta
20
Exemplo2: GROUP BY
USE AdventureWorks; GO SELECT COUNT(EmployeeID) AS 'Funcionrios', Department FROM HumanResources.vEmployeeDepartment GROUP BY Department ORDER BY Department; GO
Obs: Ordenar facilita o trabalho com o resultado da consulta. Experimente omitir a clausula ORDER BY
21
Exemplo3: GROUP BY
USE AdventureWorks; GO SELECT COUNT(CustomerID) AS 'Clientes', CustomerType FROM Sales.Customer GROUP BY CustomerType; GO
Obs: GROUP BY faz parte do comando SELECT, coloque o ponto e virgula aps Customer na clausula FROM e veja que ele no funciona.
22
Exemplo4: GROUP BY
USE AdventureWorks; GO SELECT Color, AVG(ListPrice) AS Lista FROM Production.Product WHERE ProductNumber = 'FR-R72R-58' 'FR- R72RGROUP BY ALL Color; GO Obs: Tire o ALL (os valores NULL no so listados sem o ALL) Obs2: Coloque o ProductNumber na lista de campos do comando SELECT
Um campo que no tem funo de agregao ou no est listado na clusula GROUP BY impede que a realizao da consulta. Tire o campo colocado na lista do SELECT!
23
condicao
Especifica as condies de busca para dados agrupados ou funes de agregao
Ordem de uso:
1. WHERE 2. GROUP BY 3. HAVING
24
Exemplo1: HAVING
USE AdventureWorks; GO SELECT ProductID, AVG(OrderQty) AS 'Qtd Mdia', SUM(LineTotal)AS 'Total' FROM Sales.SalesOrderDetail WHERE ProductID BETWEEN 780 AND 790 GROUP BY ProductID HAVING SUM(LineTotal) > $200000 AND AVG(OrderQty) < 3; GO
25
Resultado 1 HAVING
ProductID Qtd Media 782 785 780 788 783 786 789 2 3 2 3 2 3 2 Total 4400592.800400 442477.086952 3438478.860423 479071.900108 4009494.761841 501648.875060 1448122.478985
26
Resultado 2 HAVING
ProductID Qtd Media 782 785 780 788 783 786 789 2 3 2 3 2 3 2 Total 4400592.800400 442477.086952 3438478.860423 479071.900108 4009494.761841 501648.875060 1448122.478985
28
Exemplo1: HAVING
USE AdventureWorks; GO SELECT ProductID, SUM(OrderQty) 'Qtd Pedido' FROM Purchasing.PurchaseOrderDetail GROUP BY ProductID HAVING SUM(OrderQty) < 45; GO Experimente comentar o HAVING e colocar o critrio de comparao em uma clausula WHERE
WHERE SUM(OrderQty) < 45
29
Exemplo2: HAVING
USE AdventureWorks; GO SELECT ProductCategoryID, COUNT(ProductSubcategoryID) AS 'Qtd Produtos' FROM Production.ProductSubcategory GROUP BY ProductCategoryID HAVING COUNT(ProductSubcategoryID) = 14; GO
30
10
Exemplo3: HAVING
USE AdventureWorks; GO SELECT LocationID, SUM(Quantity) AS 'Qtd Total' FROM Production.ProductInventory GROUP BY LocationID HAVING SUM(Quantity) < 1000; GO
31
HAVING vs WHERE
HAVING Estabelece condies para a clusula GROUP BY A condio de pesquisa com HAVING aplicada APS o agrupamento A sintaxe da clusula HAVING pode conter funes de agregao HAVING pode se referir a qualquer coluna WHERE Estabelece condies para o comando SELECT A condio de pesquisa com WHERE aplicada ANTES do agrupamento A sintaxe da clusula WHERE NO pode ter funes de agregao WHERE pode se referir a qualquer coluna
32
11