Usuário com melhor resposta
Group by e Partition by

Pergunta
-
Respostas
-
O "partition" é usado quando vc quebra sua consulta em subconjuntos com o modificador OVER. Ex.:
USE AdventureWorks2012; GO SELECT FirstName, LastName, TerritoryName, ROUND(SalesYTD,2,1), ROW_NUMBER() OVER(PARTITION BY TerritoryName ORDER BY SalesYTD DESC) AS Row FROM Sales.vSalesPerson WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0 ORDER BY TerritoryName;
o resultado é (note que o rowconut, reinicia a cada mudança de territorio):
FirstName LastName TerritoryName SalesYTD Row --------- -------------------- ------------------ ------------ --- Lynn Tsoflias Australia 1421810.92 1 José Saraiva Canada 2604540.71 1 Garrett Vargas Canada 1453719.46 2 Jillian Carson Central 3189418.36 1 Ranjit Varkey Chudukatil France 3121616.32 1 Rachel Valdez Germany 1827066.71 1 Michael Blythe Northeast 3763178.17 1 Tete Mensa-Annan Northwest 1576562.19 1 David Campbell Northwest 1573012.93 2 Pamela Ansman-Wolfe Northwest 1352577.13 3 Tsvi Reiter Southeast 2315185.61 1 Linda Mitchell Southwest 4251368.54 1 Shu Ito Southwest 2458535.61 2 Jae Pak United Kingdom 4116871.22 1
fonte:http://msdn.microsoft.com/en-us/library/ms186734.aspx
O "group by" é usado em query com agregaçao (soma, media, max, min, etc) e serve para agrupar. Ex.
SELECT location, dept, SUM (salary) FROM employee GROUP BY location, dept;
resultado :
location dept salary ------------- --------------- ----------- Bangalore Electrical 25000 Bangalore Electronics 55000 Mysore Aeronautics 35000 Mangalore InfoTech 30000 att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Editado William John Adam Trindade sexta-feira, 5 de setembro de 2014 14:54
- Marcado como Resposta jceoms sábado, 6 de setembro de 2014 11:53
Todas as Respostas
-
Simplificando...
"Group By" geralmente reduz o numero de linhas retornado, usando funções como: count, max, min etc...
O "Partition By" não reduz o numero de linhas.
Cada um é utilizado em situações diferentes.
Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote
-
Jceoms,
A cláusula GROUP BY agrupa um conjunto de registros selecionados de acordo com seus valores.
Já o argumento PARTITION BY é utilizado por algumas cláusulas (OVER, RANK, DENSE_RANK, ...) para dividir um conjunto de registros.
Para maiores informações veja:
http://msdn.microsoft.com/pt-br/library/ms177673.aspx
http://msdn.microsoft.com/pt-br/library/ms189461.aspx
http://msdn.microsoft.com/pt-br/library/ms176102.aspx
Se ajudou na sua solução, não esqueça de marcar como resposta !
Abraços,
Durval RamosMicrosoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform---------------------------------- Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil" -
O "partition" é usado quando vc quebra sua consulta em subconjuntos com o modificador OVER. Ex.:
USE AdventureWorks2012; GO SELECT FirstName, LastName, TerritoryName, ROUND(SalesYTD,2,1), ROW_NUMBER() OVER(PARTITION BY TerritoryName ORDER BY SalesYTD DESC) AS Row FROM Sales.vSalesPerson WHERE TerritoryName IS NOT NULL AND SalesYTD <> 0 ORDER BY TerritoryName;
o resultado é (note que o rowconut, reinicia a cada mudança de territorio):
FirstName LastName TerritoryName SalesYTD Row --------- -------------------- ------------------ ------------ --- Lynn Tsoflias Australia 1421810.92 1 José Saraiva Canada 2604540.71 1 Garrett Vargas Canada 1453719.46 2 Jillian Carson Central 3189418.36 1 Ranjit Varkey Chudukatil France 3121616.32 1 Rachel Valdez Germany 1827066.71 1 Michael Blythe Northeast 3763178.17 1 Tete Mensa-Annan Northwest 1576562.19 1 David Campbell Northwest 1573012.93 2 Pamela Ansman-Wolfe Northwest 1352577.13 3 Tsvi Reiter Southeast 2315185.61 1 Linda Mitchell Southwest 4251368.54 1 Shu Ito Southwest 2458535.61 2 Jae Pak United Kingdom 4116871.22 1
fonte:http://msdn.microsoft.com/en-us/library/ms186734.aspx
O "group by" é usado em query com agregaçao (soma, media, max, min, etc) e serve para agrupar. Ex.
SELECT location, dept, SUM (salary) FROM employee GROUP BY location, dept;
resultado :
location dept salary ------------- --------------- ----------- Bangalore Electrical 25000 Bangalore Electronics 55000 Mysore Aeronautics 35000 Mangalore InfoTech 30000 att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Editado William John Adam Trindade sexta-feira, 5 de setembro de 2014 14:54
- Marcado como Resposta jceoms sábado, 6 de setembro de 2014 11:53