Como faço para usar o T-SQL Group By
-
08-06-2019 - |
Pergunta
Eu sei que eu preciso ter (embora eu não sei por que) um GROUP BY
cláusula final de uma consulta SQL que utiliza todas as funções agregadas, como count
, sum
, avg
, etc:
SELECT count(userID), userName
FROM users
GROUP BY userName
Quando outra coisa seria GROUP BY
ser útil e o que é que o desempenho ramificações?
Solução
Para obter o número de elementos de cada widget categoria que tem mais de 5 widgets, você poderia fazer isso:
SELECT WidgetCategory, count(*)
FROM Widgets
GROUP BY WidgetCategory
HAVING count(*) > 5
O "ter" cláusula é algo que as pessoas costumam esquecer, optando para recuperar todos os seus dados para o cliente e iterar através de lá.
Outras dicas
GRUPO é semelhante ao DISTINTOS, em que grupos de vários registros em um.
Este exemplo, emprestado de http://www.devguru.com/technologies/t-sql/7080.asp, listas de produtos distintos na tabela de Produtos.
SELECT Product FROM Products GROUP BY Product
Product
-------------
Desktop
Laptop
Mouse
Network Card
Hard Drive
Software
Book
Accessory
A vantagem do GRUPO POR mais DISTINTAS, é que ele pode dar a você um controle granular quando usado com uma cláusula HAVING.
SELECT Product, count(Product) as ProdCnt
FROM Products
GROUP BY Product
HAVING count(Product) > 2
Product ProdCnt
--------------------
Desktop 10
Laptop 5
Mouse 3
Network Card 9
Software 6
Grupo de forças de todo o conjunto a ser preenchido antes de registros são retornados (pois é uma ordenação implícita).
Por isso (e muitos outros), nunca use um Group By em uma subconsulta.
Contando o número de vezes que marcas são usadas pode ser um google exemplo:
SELECT TagName, Count(*)
AS TimesUsed
FROM Tags
GROUP BY TagName ORDER TimesUsed
Se você simplesmente quiser um valor diferente de tags, eu prefiro usar o DISTINCT
instrução.
SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC
GRUPO também ajuda quando você deseja gerar um relatório que será a média ou a soma de um monte de dados.Você pode agrupar Pelo Departamento de IDENTIFICAÇÃO e a SOMA de todas as receitas de vendas ou média da contagem de vendas para cada mês.