Respostas:
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.).
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
age
coluna, com Peters com idades diferentes e a consulta for SELECT NAME, IDADE DO GRUPO DE TABELAS POR NOME?
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 |
+---------+-------------+
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 IsActive
receber uma contagem de clientes ativos e inativos. O grupo agregou os resultados com base no campo que você especificou.
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.
Simples, ORDER BY
ordena os dados e GROUP BY
grupos 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_number
entrada pode ocorrer mais de uma vez.
No GROUP BY
caso, 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).
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.
Alguns bons exemplos lá. Assim como adiciono o meu no webcheatsheet, que fornece bons exemplos claros, além de permitir que você execute seu próprio SQL.
ORDER BY
mostra um campo em ordem crescente ou decrescente. Enquanto GROUP BY
mostra os mesmos nomes de campo, IDs etc em apenas uma saída.
Note-se que GROUP BY
nem sempre é necessário, pois (pelo menos no PostgreSQL e provavelmente em outras variantes do SQL) você pode usar ORDER BY
com uma lista e ainda pode usar ASC
ou DESC
por coluna ...
SELECT name_first, name_last, dob
FROM those_guys
ORDER BY name_last ASC, name_first ASC, dob DESC;