cuál es la diferencia entre GROUP BY y ORDER BY en sql


¿Cuándo se usa cuál en general? Los ejemplos son muy alentadores!

Me refiero a MySQL, pero no puedo imaginar que el concepto sea diferente en otro DBMS

Author: Community, 2009-08-14

11 answers

ORDER BY altera el orden en el que se devuelven los artículos.

AGRUPAR POR agregará registros por las columnas especificadas, lo que le permite realizar funciones de agregación en columnas no agrupadas (como SUMA, RECUENTO, PROMEDIO, etc.).

 74
Author: CMerat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-14 11:52:41

ORDER BY altera el orden en el que se devuelven los artículos.

AGRUPAR POR agregará registros por las columnas especificadas, lo que le permite realizar funciones de agregación en columnas no agrupadas (como SUMA, RECUENTO, PROMEDIO, 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
 219
Author: RiddlerDev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-17 00:30:47

ORDENAR POR: ordenar los datos en orden ascendente o descendente.

Considere la CLIENTES cuadro:

+----+----------+-----+-----------+----------+
| 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 continuación se muestra un ejemplo, que ordenaría el resultado en orden ascendente por NOMBRE:

SQL> SELECT * FROM CUSTOMERS
     ORDER BY NAME;

Esto produciría el siguiente 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 |
+----+----------+-----+-----------+----------+

AGRUPAR POR: organizar datos idénticos en grupos.

Ahora, CLIENTES la tabla tiene los siguientes registros con nombres 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 |
+----+----------+-----+-----------+----------+

Si desea agrupar nombres idénticos en un solo nombre, luego AGRUPAR POR consulta sería el siguiente:

SQL> SELECT * FROM CUSTOMERS
     GROUP BY NAME;

Esto produciría el siguiente resultado: (para nombres idénticos elegiría el último y finalmente ordenaría la columna en orden ascendente)

    +----+----------+-----+-----------+----------+   
    | 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 usted ha deducido que no sirve de nada sin funciones SQL como sum,avg, etc..

Así que ve a través de esta definición para entender el uso apropiado del GRUPO POR:

Una cláusula GROUP BY funciona en las filas devuelto por una consulta resumiendo filas idénticas en un grupo único / distinto y devuelve una sola fila con el resumen para cada grupo, utilizando Agregado apropiado función en la lista de SELECCIÓN, como COUNT (), SUM (), MIN (), MAX (), AVG(), sucesivamente.

Ahora, si desea saber la cantidad total de salario en cada cliente (nombre), entonces AGRUPE POR consulta sería el siguiente:

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

Esto produciría el siguiente resultado: (suma de los salarios de nombres idénticos y la columna NOMBRE después de eliminar nombres idénticos)

+---------+-------------+
| NAME    | SUM(SALARY) |
+---------+-------------+
| Hardik  |     8500.00 |
| kaushik |     8500.00 |
| Komal   |     4500.00 |
| Muffy   |    10000.00 |
| Ramesh  |     3500.00 |
+---------+-------------+
 50
Author: JerryGoyal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-22 19:50:57

La diferencia es exactamente lo que el nombre implica: un grupo by realiza una operación de agrupación, y un orden por clases.

Si lo hace SELECT * FROM Customers ORDER BY Name entonces obtendrá la lista de resultados ordenada por el nombre del cliente.

Si lo haces SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActive obtendrás un recuento de clientes activos e inactivos. El grupo por agregado de los resultados en función del campo especificado.

 21
Author: Max Schmeling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-11 06:23:44

Tienen un significado totalmente diferente y realmente no están relacionados en absoluto.

ORDENAR POR le permite ordenar el conjunto de resultados de acuerdo con diferentes criterios, como primero ordenar por nombre de la a a la z, luego ordenar por el precio más alto a más bajo.

(ORDENAR POR nombre, precio DESC)

AGRUPAR POR le permite tomar su conjunto de resultados, agruparlo en grupos lógicos y luego ejecutar consultas agregadas en esos grupos. Por ejemplo, puede seleccionar a todos los empleados, agruparlos por su lugar de trabajo y calcular el salario promedio de todos los empleados de cada lugar de trabajo.

 12
Author: PatrikAkerstrand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-16 12:07:45

Simple, ORDER BY ordena los datos y GROUP BY agrupa, o combina los datos.

ORDER BY ordena el conjunto de resultados según el campo mencionado, por defecto en orden ascendente.

Supongamos que está lanzando una consulta como ORDER BY (student_roll_number), le mostrará el resultado en orden ascendente de los números de rollo del estudiante. Aquí, student_roll_number la entrada puede ocurrir más de una vez.

En el caso GROUP BY, usamos esto con funciones agregadas, y agrupa los datos según la función agregada, y obtenemos el resultado. Aquí, si nuestro query tiene SUM (marks) junto con GROUP BY (student_first_name) mostrará la suma de las notas de los estudiantes pertenecientes a cada grupo (donde todos los miembros de un grupo tendrán el mismo nombre).

 7
Author: Swapnil Chincholkar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-14 19:33:51

AGRUPAR POR se usa para agrupar filas en una selección, generalmente al agregar filas (por ejemplo, calcular totales, promedios, etc.). para un conjunto de filas con los mismos valores para algunos campos).

ORDER BY se usa para ordenar las filas resultantes de una instrucción select.

 3
Author: Cătălin Pitiș,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-14 11:53:02

Algunos buenos ejemplos. Al igual que añadir mi propio desde webcheatsheet que da buenos ejemplos claros, así como le permite ejecutar su propio SQL.

Orden SQL Por

Grupo SQL Por

 3
Author: kevchadders,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-14 12:29:49

ORDER BY muestra un campo en orden ascendente o descendente. Mientras que GROUP BY muestra los mismos nombres de campo, id's etc en una sola salida.

 1
Author: Im_khan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-04 06:41:12
  1. AGRUPAR POR agregará registros por la columna especificada, lo que le permite realizar funciones de agregación en columnas no agrupadas (como SUMA, RECUENTO, PROMEDIO, etc.).). ORDER BY altera el orden en el que se devuelven los artículos.
  2. Si lo haces SELECCIONA isActive, CUENTA ( * ) DEL GRUPO de clientes POR isActive obtienes un recuento de clientes activos e inactivos. El grupo por agregado de los resultados en función del campo especificado. Si lo haces SELECCIONE * DE los clientes ORDENAR POR nombre entonces usted consigue la lista de resultados ordenada por el nombre del cliente.
  3. Si se AGRUPA, los resultados no están necesariamente ordenados; aunque en muchos casos pueden salir en un orden intuitivo, eso no está garantizado por la cláusula GROUP. Si desea que sus grupos estén ordenados, siempre use un ORDEN explícito POR después del GRUPO POR.
  4. Los datos agrupados no se pueden filtrar por la cláusula WHERE. Los datos del pedido se pueden filtrar por la cláusula WHERE.
 1
Author: Khadija,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-22 07:33:05

Debe tenerse en cuenta que GROUP BY no siempre es necesario ya que (al menos en PostgreSQL, y probablemente en otras variantes SQL) puede usar ORDER BY con una lista y todavía puede usar ASC o DESC por la columna...

SELECT name_first, name_last, dob 
FROM those_guys 
ORDER BY name_last ASC, name_first ASC, dob DESC;
 0
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-22 17:22:03