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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top