Buscar..


Sintaxis

  1. SELECCIONAR expresión1, expresión2, ... expresión_n,
  2. aggregate_function (expresión)
  3. DE las tablas
  4. [DÓNDE condiciones]
  5. GRUPO POR expresión1, expresión2, ... expresión_n;

Parámetros

Parámetro DETALLES
expresión1, expresión2, ... expresión_n Las expresiones que no están encapsuladas dentro de una función agregada y deben incluirse en la cláusula GROUP BY.
función agregada Una función como SUM, COUNT, MIN, MAX o AVG.
mesas Las tablas de las que desea recuperar registros. Debe haber al menos una tabla en la cláusula FROM.
Donde las condiciones Opcional. Las condiciones que deben cumplirse para que los registros sean seleccionados.

Observaciones

La cláusula MySQL GROUP BY se usa en una declaración SELECT para recopilar datos en varios registros y agrupar los resultados por una o más columnas.

Su comportamiento se rige en parte por el valor de la variable ONLY_FULL_GROUP_BY . Cuando esto está habilitado, las SELECT que se agrupan por cualquier columna que no esté en la salida devuelven un error. ( Este es el valor predeterminado de 5.7.5 ). Tanto la configuración como la no configuración de esta variable pueden causar problemas para usuarios ingenuos o usuarios acostumbrados a otros DBMS.

Grupo usando la función SUMA

SELECT product, SUM(quantity) AS "Total quantity"
FROM order_details
GROUP BY product;

Grupo usando la función MIN

Supongamos una tabla de empleados en la que cada fila es un empleado que tiene un name , un department y un salary .

SELECT department, MIN(salary) AS "Lowest salary"
FROM employees
GROUP BY department;

Esto le diría qué departamento contiene el empleado con el salario más bajo y cuál es ese salario. Encontrar el name del empleado con el salario más bajo en cada departamento es un problema diferente, más allá del alcance de este Ejemplo. Consulte "groupwise max".

GRUPO UTILIZANDO COUNT FUNCION

SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department;

GRUPO POR USO QUE TIENE

SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department
HAVING COUNT(*) >= 10;

Usar GROUP BY ... HAVING para filtrar registros agregados es análogo a usar SELECT ... WHERE para filtrar registros individuales.

También podrías decir HAVING Man_Power >= 10 ya que HAVING entiende "aliases".

Grupo utilizando Group Concat

Group Concat se usa en MySQL para obtener valores concatenados de expresiones con más de un resultado por columna. Es decir, hay muchas filas para volver a seleccionar para una columna como Name(1):Score(*)

Nombre Puntuación
Adán A +
Adán UNA-
Adán segundo
Adán C +
Cuenta RE-
Juan UNA-
SELECT Name, GROUP_CONCAT(Score ORDER BY Score desc SEPERATOR ' ') AS Grades
FROM   Grade
GROUP BY Name

Resultados:

+------+------------+ 
| Name | Grades     | 
+------+------------+ 
| Adam | C+ B A- A+ | 
| Bill | D-         | 
| John | A-         | 
+------+------------+ 

GROUP BY con funciones AGREGADAS

Tabla de pedidos

+---------+------------+----------+-------+--------+
| orderid | customerid | customer | total | items  |
+---------+------------+----------+-------+--------+
|       1 |          1 | Bob      |  1300 |     10 |
|       2 |          3 | Fred     |   500 |      2 |
|       3 |          5 | Tess     |  2500 |      8 |
|       4 |          1 | Bob      |   300 |      6 |
|       5 |          2 | Carly    |   800 |      3 |
|       6 |          2 | Carly    |  1000 |     12 |
|       7 |          3 | Fred     |   100 |      1 |
|       8 |          5 | Tess     | 11500 |     50 |
|       9 |          4 | Jenny    |   200 |      2 |
|      10 |          1 | Bob      |   500 |     15 |
+---------+------------+----------+-------+--------+
  • CONTAR

Devuelve el número de filas que satisfacen un criterio específico en la cláusula WHERE .

Ej .: Número de pedidos para cada cliente.

SELECT customer, COUNT(*) as orders
FROM orders
GROUP BY customer
ORDER BY customer

Resultado:

+----------+--------+
| customer | orders |
+----------+--------+
| Bob      |      3 |
| Carly    |      2 |
| Fred     |      2 |
| Jenny    |      1 |
| Tess     |      2 |
+----------+--------+
  • SUMA

Devuelve la suma de la columna seleccionada.

Ej .: Suma del total y artículos para cada cliente.

SELECT customer, SUM(total) as sum_total, SUM(items) as sum_items
FROM orders
GROUP BY customer
ORDER BY customer

Resultado:

+----------+-----------+-----------+
| customer | sum_total | sum_items |
+----------+-----------+-----------+
| Bob      |      2100 |        31 |
| Carly    |      1800 |        15 |
| Fred     |       600 |         3 |
| Jenny    |       200 |         2 |
| Tess     |     14000 |        58 |
+----------+-----------+-----------+
  • AVG

Devuelve el valor promedio de una columna de valor numérico.

Ej .: Valor medio del pedido para cada cliente.

SELECT customer, AVG(total) as avg_total
FROM orders
GROUP BY customer
ORDER BY customer

Resultado:

+----------+-----------+
| customer | avg_total |
+----------+-----------+
| Bob      |       700 |
| Carly    |       900 |
| Fred     |       300 |
| Jenny    |       200 |
| Tess     |      7000 |
+----------+-----------+
  • MAX

Devuelve el valor más alto de una determinada columna o expresión.

Por ejemplo: el mayor total de pedidos para cada cliente.

SELECT customer, MAX(total) as max_total
FROM orders
GROUP BY customer
ORDER BY customer

Resultado:

+----------+-----------+
| customer | max_total |
+----------+-----------+
| Bob      |      1300 |
| Carly    |      1000 |
| Fred     |       500 |
| Jenny    |       200 |
| Tess     |     11500 |
+----------+-----------+
  • MIN

Devuelve el valor más bajo de una determinada columna o expresión.

Ej .: El pedido más bajo para cada cliente.

SELECT customer, MIN(total) as min_total
FROM orders
GROUP BY customer
ORDER BY customer

Resultado:

+----------+-----------+
| customer | min_total |
+----------+-----------+
| Bob      |       300 |
| Carly    |       800 |
| Fred     |       100 |
| Jenny    |       200 |
| Tess     |      2500 |
+----------+-----------+


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow