none
Group by e Partition by RRS feed

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 :

    locationdeptsalary
    ---------------------------------------
    BangaloreElectrical25000
    BangaloreElectronics55000
    MysoreAeronautics35000
    MangaloreInfoTech30000

    att

    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------



    sexta-feira, 5 de setembro de 2014 14:52

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

    sexta-feira, 5 de setembro de 2014 14:48
  • 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 Ramos
    Microsoft Partner | MTA | MCSA - SQL Server 2012 | MCSE - Data Platform
    ----------------------------------
    Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
    sexta-feira, 5 de setembro de 2014 14:50
    Moderador
  • 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 :

    locationdeptsalary
    ---------------------------------------
    BangaloreElectrical25000
    BangaloreElectronics55000
    MysoreAeronautics35000
    MangaloreInfoTech30000

    att

    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------



    sexta-feira, 5 de setembro de 2014 14:52