Como usar group by, tendo, e cláusulas order by sql
SQL dá-lhe as opções para recuperar, analisar e exibir as informações necessárias com o GROUP BY, HAVING e ORDER BY cláusulas. Aqui estão alguns exemplos de como você pode usá-los.
Conteúdo
Video: Group by in sql server - Part 11
GROUP BY cláusulas
Às vezes, em vez de recuperar os registros individuais, você quer saber algo sobre um grupo de registros. o GROUP BY cláusula é a ferramenta que você precisa.
Suponha que você é o gerente de vendas de uma outra localização, e você quer olhar para o desempenho de sua força de vendas. Se você fizer uma simples SELECIONAR, tais como a seguinte consulta:
InvoiceNo SELECT, SaleDate, Vendedor, TotalSaleFROM vendas-
Este resultado dá uma idéia de quão bem seus vendedores está fazendo, porque tão poucas vendas totais estão envolvidos. No entanto, na vida real, uma empresa teria muitos mais vendas - e não seria tão fácil de dizer se os objectivos de vendas estavam sendo atendidas.
Para fazer a análise real, você pode combinar a GROUP BY cláusula com uma das agregar funções (também chamados funções definidas) Para obter uma imagem quantitativa do desempenho de vendas. Por exemplo, você pode ver que vendedor está vendendo mais dos itens de alta bilhete rentáveis usando a média (AVG) Função como se segue:
Vendedor SELECT, AVG (TotalSale) FROM SalesGroup POR Salesperson-
Executar a consulta com um sistema de gerenciamento de banco de dados diferente recuperaria o mesmo resultado, mas pode parecer um pouco diferente.
O valor médio das vendas de Bennett é consideravelmente maior do que a dos outros dois vendedores. Você comparar o total de vendas com uma consulta semelhante:
Vendedor SELECT, SUM (TotalSale) FROM SalesGroup POR Salesperson-
Bennett também tem as maiores vendas totais, o que é consistente com ter as maiores vendas médios.
TENDO cláusulas
Você pode analisar os dados agrupados ainda mais usando o TENDO cláusula. o TENDO cláusula é um filtro que atua semelhante a um ONDE cláusula, mas em grupos de linhas, em vez de em linhas individuais. Para ilustrar a função do TENDO cláusula, suponha que o gerente de vendas considera Bennett estar em uma classe por si mesmo.
Seu desempenho distorce os dados globais para o outro vendedores. (Aha -. Uma curva-guincho) Você pode excluir as vendas de Bennett a partir dos dados agrupados usando um TENDO cláusula como segue:
Vendedor SELECT, SUM (TotalSale) FROM SalesGroup POR SalespersonHAVING vendedor lt; gt; `Bennett`-
Apenas as linhas onde o vendedor não é Bennett são considerados.
ORDER BY cláusulas
Use o ORDENAR POR cláusula para exibir a tabela de saída de uma consulta em ordem crescente ou decrescente ordem alfabética. Considerando que a GROUP BY cláusula reúne linhas em grupos e classifica os grupos em ordem alfabética, ORDENAR POR classifica linhas individuais. o ORDENAR POR cláusula deve ser a última cláusula que você especificar em uma consulta.
Se a consulta também contém uma GROUP BY cláusula, a cláusula primeiro organiza as linhas de saída em grupos. o ORDENAR POR cláusula, em seguida, classifica as linhas dentro de cada grupo. Se você não tem GROUP BY cláusula, em seguida, a declaração considera a tabela inteira como um grupo, eo ORDENAR POR cláusula ordena todas as suas linhas de acordo com a coluna (ou colunas) que o ORDENAR POR cláusula especifica.
Para ilustrar este ponto, considere os dados na tabela de vendas. A tabela contém colunas para VENDAS InvoiceNo, Data de venda, vendedor, e TotalSale. Se você usar o exemplo a seguir, você vê todos os dados na tabela de vendas - mas em uma ordem arbitrária:
SELECT * FROM SALES -
Em uma aplicação, esta pode ser a ordem em que você inseriu as linhas na mesa- em outra execução, a ordem pode ser que as atualizações mais recentes. O pedido também pode mudar inesperadamente se alguém reorganiza o banco de dados. Essa é uma razão que é geralmente uma boa idéia para especificar a ordem na qual deseja que as linhas.
Você pode, por exemplo, quer ver as linhas em ordem pela Data de venda como isso:
SELECT * DE VENDAS ORDER BY SaleDate -
Este exemplo retorna todas as linhas na tabela de vendas, a fim de Data de venda.
Para linhas com o mesmo Data de venda, a ordem padrão depende da implementação. Você pode, no entanto, especificar como classificar as linhas que compartilham o mesmo Data de venda. Você pode querer ver as vendas para cada Data de venda a fim de InvoiceNo, do seguinte modo:
* SELECT FROM SALES ORDER BY SaleDate, InvoiceNo -
Este exemplo primeira ordena as vendas por Data de venda- em seguida, para cada Data de venda, ele ordena as vendas por InvoiceNo. Mas não confunda esse exemplo com a seguinte consulta:
SELECT * DE VENDAS ORDER BY InvoiceNo, SaleDate -
Esta consulta primeira ordena as vendas por INVOICE_NO. Então, para cada diferente InvoiceNo, a consulta ordena as vendas por Data de venda. Isso provavelmente não vai produzir o resultado desejado, porque é improvável que várias datas de venda vai existir por um único número da fatura.
Video: Agrupando. Select, Count, Group By con MySql Workbench. Tutorial SQL 11 en español
A consulta a seguir é outro exemplo de como o SQL pode retornar dados:
SELECT * DE VENDAS ORDER BY vendedor, SaleDate -
Este exemplo primeiras ordens por vendedor e, em seguida, pela Data de venda. Depois de olhar para os dados nessa ordem, você pode querer invertê-lo, como segue:
SELECT * DE VENDAS ORDER BY SaleDate, Vendedor -
Este exemplo ordena as linhas pela primeira vez por Data de venda e, em seguida, pela vendedor.
Video: Tutorial SQL: GROUP BY / HAVING
Todos esses exemplos ordenando estão em crescente (ASC) A ordem, que é a ordem de classificação padrão. O último SELECIONAR mostra as vendas anteriores primeiro - e, dentro de uma determinada data, mostra as vendas para ‘Adams’ antes `Padeiro`. Se preferir descendente (DESC) Ordem, você pode especificar esta ordem para uma ou mais das colunas de ordem, como segue:
SELECT * DE SalesOrder POR SaleDate DESC, vendedor ASC -
Este exemplo especifica uma ordem decrescente de datas de venda, mostrando as vendas mais recentes primeiro, e uma ordem ascendente para os vendedores, colocá-los em ordem alfabética. Isso deve lhe dar uma imagem melhor de como o desempenho de Bennett empilha contra a do outro vendedores.