MySQL extiende el uso de GROUP BY
para que
pueda usar columnas o cálculos en la lista
SELECT
que no aparecen en la cláusula
GROUP BY
. Esto se aplica a
cualquier valor posible para este grupo .
Puede usarlo para obtener mejor rendimiento al evitar ordenar y
agrupar elementos innecesarios. Por ejemplo, no necesita agrupar
customer.name
en la siguiente consulta:
mysql> SELECT order.custid, customer.name, MAX(payments) -> FROM order,customer -> WHERE order.custid = customer.custid -> GROUP BY order.custid;
En SQL estándar, puede tener que añadir
customer.name
a la cláusula GROUP
BY
. En MySQL, el nombre es redundante si no se
ejecuta en modo ANSI.
No use esta característica si las columnas
que omite de la parte GROUP BY
no son únicos
en el grupo! Obtendría resultados impredecibles.
En algunos casos, puede usar MIN()
y
MAX()
para obtener valores específicos de
columna incluso si no son únicos. La siguiente da el valor de
column
del registro conteniendo el valor más
pequeño en la columna sort
:
SUBSTR(MIN(CONCAT(RPAD(sort,6,' '),column)),7)
Consulte Sección 3.6.4, “Los registros de un grupo que tienen el máximo valor en alguna columna”.
Tenga en cuenta que si trata de seguir SQL estándar, no puede
usar expresiones en clásulas GROUP BY
o
ORDER BY
. Puede solucionar esta limitación
usando un alias para la expresión:
mysql> SELECT id,FLOOR(value/100) AS val
-> FROM tbl_name
-> GROUP BY id, val ORDER BY val;
Sin embargo, MySQL le permite usar expresiones en cláusulas
GROUP BY
y ORDER BY
. Por
ejemplo:
mysql> SELECT id, FLOOR(value/100) FROM tbl_name
ORDER BY RAND();
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.