Como usar GROUP BY, HAVING e ORDER BY cláusulas 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.
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ão fazendo, porque tão poucas vendas totais estão envolvidos. No entanto, na vida real, uma empresa teria muitas mais vendas - e que 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 um dos agregar funções (também chamados funções de conjunto) Para obter uma imagem quantitativa do desempenho de vendas. Por exemplo, você pode ver qual vendedor está vendendo mais dos itens de alta bilhete rentáveis com recurso à 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 mais elevada do que a dos outros dois vendedores. Você compara 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 actua 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;> 'Bennett'-
Somente as linhas onde o vendedor não é Bennett são considerados.
ORDER BY
Use o ORDENAR POR cláusula para exibir a tabela de saída de uma consulta na ordem crescente ou decrescente ordem alfabética. Considerando que o GROUP BY cláusula reúne linhas em grupos e classifica os grupos em ordem alfabética, ORDENAR POR ordena 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 um GROUP BY cláusula, a cláusula primeira 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, então a instrução considera a tabela inteira como um grupo, e a 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 SALES contém colunas para 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 da 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 partilham a mesma 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 primeiro 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.
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.
Todos esses exemplos de ordenação estão em crescente (ASC) A ordem, que é a ordem de classificação padrão. O último SELECIONAR mostra as vendas anteriores em primeiro lugar - 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 em primeiro lugar, 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 se compara com o do outro vendedores.