Como faço para usar T-SQL Group By

votos
28

Eu sei que eu preciso ter (embora eu não sei porque) uma GROUP BYcláusula sobre o fim de uma consulta SQL que usa quaisquer funções agregadas, como count, sum, avg, etc:

SELECT count(userID), userName
FROM users
GROUP BY userName

Quando mais poderia GROUP BYser útil, e quais são as ramificações de desempenho?

Publicado 05/08/2008 em 19:55
fonte usuário
Em outras línguas...                            


5 respostas

votos
30

Para recuperar o número de widgets de cada categoria widget que tem mais de 5 widgets, você poderia fazer isso:

SELECT WidgetCategory, count(*)
FROM Widgets
GROUP BY WidgetCategory
HAVING count(*) > 5

A cláusula de "ter" é algo que as pessoas muitas vezes esquecer, optando para recuperar todos os seus dados para o cliente e interagindo com ele lá.

Respondeu 05/08/2008 em 20:32
fonte usuário

votos
13

GROUP BY é semelhante a DISTINCT na medida em que agrupa vários registros em um.

Neste exemplo, emprestado de http://www.devguru.com/technologies/t-sql/7080.asp , lista 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 de GROUP BY sobre DISTINCT, é que ele pode dar-lhe 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
Respondeu 19/08/2008 em 15:02
fonte usuário

votos
3

Grupo por forças todo o conjunto a ser preenchida antes registros são retornados (uma vez que é um tipo implícito).

Por essa razão (e muitos outros), nunca use um grupo, em uma subconsulta.

Respondeu 05/08/2008 em 20:01
fonte usuário

votos
2

Contando o número de vezes que as tags são usadas pode ser um exemplo google:

SELECT TagName, Count(*)
AS TimesUsed
FROM Tags
GROUP BY TagName ORDER TimesUsed

Se você simplesmente quer um valor distinto de etiquetas, eu preferiria usar o DISTINCTcomunicado.

SELECT DISTINCT TagName
FROM Tags
ORDER BY TagName ASC
Respondeu 05/08/2008 em 19:58
fonte usuário

votos
0

GROUP BY também ajuda quando você deseja gerar um relatório que, em média, ou resumir um monte de dados. Você pode agrupar pelo Departamento ID ea soma toda a receita de vendas ou AVG a contagem de vendas para cada mês.

Respondeu 05/08/2008 em 20:00
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more