qual é a diferença entre GROUP BY e ORDER BY em sql


119

Quando você usa qual em geral? Exemplos são altamente encorajados!

Estou me referindo ao MySql, mas não consigo imaginar o conceito diferente em outro DBMS

Respostas:


79

ORDER BY altera a ordem em que os itens são devolvidos.

GROUP BY agregará registros pelas colunas especificadas, o que permite executar funções de agregação em colunas não agrupadas (como SUM, COUNT, AVG etc.).


130
Esta afirmação não faz praticamente sentido sem um exemplo anexo.
JohnMerlino

2
eu acho que o segundo exemplo na página no link é suficiente para entender a diferença tutorialspoint.com/sql/sql-group-by.htm
nishantbhardwaj2002

Você pode fornecer um exemplo?
Rice

249

ORDER BY altera a ordem em que os itens são devolvidos.

GROUP BY agregará registros pelas colunas especificadas, o que permite executar funções de agregação em colunas não agrupadas (como SUM, COUNT, AVG etc.).

TABLE:
ID NAME
1  Peter
2  John
3  Greg
4  Peter

SELECT *
FROM TABLE
ORDER BY NAME

= 
3 Greg
2 John
1 Peter
4 Peter

SELECT Count(ID), NAME
FROM TABLE
GROUP BY NAME

= 
1 Greg
1 John 
2 Peter

SELECT NAME
FROM TABLE
GROUP BY NAME
HAVING Count(ID) > 1

=
Peter

2
E se a tabela tiver agecoluna, com Peters com idades diferentes e a consulta for SELECT NAME, IDADE DO GRUPO DE TABELAS POR NOME?
Varun

1
Você não pode retornar colunas que não estão no seu grupo ou que possuem um método. Então, você precisa adicionar a idade ao grupo, ou fazer algo como Max (Idade).
RiddlerDev

78

ORDER BY: ordena os dados em ordem crescente ou decrescente.

Considere a tabela CLIENTES :

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

A seguir, é apresentado um exemplo, que classificaria o resultado em ordem crescente por NAME:

SQL> SELECT * FROM CUSTOMERS
     ORDER BY NAME;

Isso produziria o seguinte resultado:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
+----+----------+-----+-----------+----------+

GRUPO POR: organize dados idênticos em grupos.

Agora, a tabela CLIENTES possui os seguintes registros com nomes duplicados:

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Ramesh   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | kaushik  |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

se você quiser agrupar nomes idênticos em nome único, a consulta GROUP BY será a seguinte:

SQL> SELECT * FROM CUSTOMERS
     GROUP BY NAME;

Isso produziria o seguinte resultado: (para nomes idênticos, escolheria o último e finalmente classificaria a coluna em ordem crescente)

    +----+----------+-----+-----------+----------+   
    | ID | NAME     | AGE | ADDRESS   | SALARY   |
    +----+----------+-----+-----------+----------+
    |  5 | Hardik   |  27 | Bhopal    |  8500.00 |
    |  4 | kaushik  |  25 | Mumbai    |  6500.00 |
    |  6 | Komal    |  22 | MP        |  4500.00 |
    |  7 | Muffy    |  24 | Indore    | 10000.00 |
    |  2 | Ramesh   |  25 | Delhi     |  1500.00 |
    +----+----------+-----+-----------+----------+

como você deduziu que é inútil sem funções SQL como sum, avg etc.

portanto, siga esta definição para entender o uso adequado do GROUP BY:

Uma cláusula GROUP BY funciona nas linhas retornadas por uma consulta, resumindo linhas idênticas em um grupo único / distinto e retorna uma única linha com o resumo de cada grupo, usando a função Aggregate apropriada na lista SELECT, como COUNT (), SUM (), MIN (), MAX (), AVG () etc.

Agora, se você deseja saber o valor total do salário de cada cliente (nome), a consulta GROUP BY seria a seguinte:

SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS
     GROUP BY NAME;

Isso produziria o seguinte resultado: (soma dos salários de nomes idênticos e classifique a coluna NAME após remover nomes idênticos)

+---------+-------------+
| NAME    | SUM(SALARY) |
+---------+-------------+
| Hardik  |     8500.00 |
| kaushik |     8500.00 |
| Komal   |     4500.00 |
| Muffy   |    10000.00 |
| Ramesh  |     3500.00 |
+---------+-------------+

25

A diferença é exatamente o que o nome indica: um grupo executando uma operação de agrupamento e uma ordem por classificação.

Se o fizer SELECT * FROM Customers ORDER BY Name, você obtém a lista de resultados classificada pelo nome do cliente.

Se você SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActivereceber uma contagem de clientes ativos e inativos. O grupo agregou os resultados com base no campo que você especificou.


3
Além disso: se você agrupar, os resultados não serão necessariamente classificados; embora, em muitos casos, eles possam sair em uma ordem intuitiva, isso não é garantido pela cláusula GROUP. Se você deseja que seus grupos sejam classificados, sempre use uma explicação ORDER BY após o GROUP BY.
Dave Costa

16

Eles têm um significado totalmente diferente e não estão realmente relacionados.

ORDER BY permite classificar o conjunto de resultados de acordo com critérios diferentes, como primeiro classificar por nome de az e, em seguida, classificar pelo preço mais alto para o mais baixo.

(PEDIDO POR nome, preço DESC)

GROUP BY permite que você pegue seu conjunto de resultados, agrupe-o em grupos lógicos e execute consultas agregadas nesses grupos. Por exemplo, você pode selecionar todos os funcionários, agrupá-los por local de trabalho e calcular o salário médio de todos os funcionários de cada local de trabalho.


8

Simples, ORDER BYordena os dados e GROUP BYgrupos ou combina os dados.

ORDER BY ordena o conjunto de resultados conforme o campo mencionado, por padrão, em ordem crescente.

Suponha que você esteja disparando uma consulta ORDER BY (student_roll_number), pois ela mostrará o resultado em ordem crescente dos números de rolo dos alunos. Aqui, a student_roll_numberentrada pode ocorrer mais de uma vez.

No GROUP BYcaso, usamos isso com funções agregadas, e agrupa os dados de acordo com a função agregada, e obtemos o resultado. Aqui, se a nossa consulta SUM (marks)contiver, GROUP BY (student_first_name)ela mostrará a soma das marcas dos alunos pertencentes a cada grupo (onde todos os membros de um grupo terão o mesmo nome).


4

GROUP BY é usado para agrupar linhas em uma seleção, geralmente ao agregar linhas (por exemplo, calcular totais, médias, etc. para um conjunto de linhas com os mesmos valores para alguns campos).

ORDER BY é usado para ordenar as linhas resultantes de uma instrução select.



1

ORDER BYmostra um campo em ordem crescente ou decrescente. Enquanto GROUP BYmostra os mesmos nomes de campo, IDs etc em apenas uma saída.


4
Esta resposta não fornece informações adicionais que a resposta aceita ou qualquer outra resposta fornecida ainda não indique.
Newfurniturey 26/10/12

1
  1. GROUP BY agregará registros pela coluna especificada, o que permite executar funções de agregação em colunas não agrupadas (como SUM, COUNT, AVG etc.). ORDER BY altera a ordem em que os itens são devolvidos.
  2. Se você SELECIONAR IsActive, COUNT (*) FROM Customers GROUP BY IsActive, obtém uma contagem de clientes ativos e inativos. O grupo agregou os resultados com base no campo que você especificou. Se você selecionar * FROM Customers ORDER BY Name, obterá a lista de resultados classificada pelo nome do cliente.
  3. Se você GROUP, os resultados não serão necessariamente classificados; embora, em muitos casos, eles possam sair em uma ordem intuitiva, isso não é garantido pela cláusula GROUP. Se você deseja que seus grupos sejam classificados, sempre use um ORDER BY explicitamente após o GROUP BY.
  4. Os dados agrupados não podem ser filtrados pela cláusula WHERE. Os dados do pedido podem ser filtrados pela cláusula WHERE.

0

Note-se que GROUP BYnem sempre é necessário, pois (pelo menos no PostgreSQL e provavelmente em outras variantes do SQL) você pode usar ORDER BYcom uma lista e ainda pode usar ASCou DESC por coluna ...

SELECT name_first, name_last, dob 
FROM those_guys 
ORDER BY name_last ASC, name_first ASC, dob DESC;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.