10 Consejos para Ordenar

Ordenar y agrupar datos es fundamental para analizar y resumir la información de manera efectiva. Afortunadamente, SQL ofrece una serie de cláusulas y operadores que te permiten realizar estas tareas. A continuación, te presentamos algunos consejos que te ayudarán a comprender cuándo ordenar, cuándo agrupar y cómo resumir datos en SQL. Para obtener información detallada sobre cada cláusula y operador, consulta la documentación.

Índice de Contenido
  1. #1: Ordena tus datos
  2. #2: Agrupa valores similares en un grupo
  3. #3: Filtra los datos antes de agrupar
  4. #4: Incluye todos los grupos
  5. #5: Filtra los datos después de agrupar
  6. #6: Comprende WHERE y HAVING
  7. #7: Resume los valores agrupados con funciones de agregación
  8. #8: Resume el agregado
  9. #9: Resume cada columna
  10. #10: Ordena los resúmenes

#1: Ordena tus datos

En muchas ocasiones, todo lo que necesitas es un poco de orden en tus datos. La cláusula ORDER BY de SQL te permite organizar los datos alfabética o numéricamente. De esta manera, los valores similares se agrupan y se muestran juntos. Sin embargo, esta aparente agrupación es el resultado del ordenamiento y no representa grupos reales. La cláusula ORDER BY muestra cada registro individualmente, mientras que un grupo puede representar varios registros.

#2: Agrupa valores similares en un grupo

La mayor diferencia entre ordenar y agrupar es que el ordenamiento muestra todos los registros (dentro de los límites de cualquier criterio de filtrado) y el agrupamiento no. La cláusula GROUP BY reduce los valores similares a un solo registro. Por ejemplo, puedes utilizar la cláusula GROUP BY para obtener una lista única de códigos postales de una fuente que repite esos valores:

SELECT CódigoPostal
FROM Clientes
GROUP BY CódigoPostal

Incluye solo aquellas columnas que definen el grupo tanto en la cláusula GROUP BY como en la lista de columnas SELECT. En otras palabras, la lista SELECT debe coincidir con la lista GROUP BY, con una excepción: la lista SELECT puede incluir funciones de agregación (GROUP BY no permite funciones de agregación).

Ten en cuenta que el GROUP BY no ordenará los grupos resultantes. Para ordenar los grupos alfabéticamente o numéricamente, puedes agregar una cláusula ORDER BY (#1). Además, no puedes hacer referencia a un campo con alias en la cláusula GROUP BY. Las columnas del grupo deben estar en los datos subyacentes, pero no es necesario que aparezcan en los resultados.

#3: Filtra los datos antes de agrupar

Puedes filtrar los datos que se agruparán agregando una cláusula WHERE. Por ejemplo, la siguiente consulta devuelve una lista única de códigos postales únicamente para los clientes de Kentucky:

Cómo instalar y configurar Sybase Adaptive Server Enterprise (ASE) en Linux
SELECT CódigoPostal
FROM Clientes
WHERE Estado = 'KY'
GROUP BY CódigoPostal

Es importante recordar que la cláusula WHERE filtra los datos antes de que se evalúe la cláusula GROUP BY.

Al igual que GROUP BY, WHERE no admite funciones de agregación.

#4: Incluye todos los grupos

Cuando utilizas WHERE para filtrar datos, los grupos resultantes muestran solo aquellos registros que especifiques. Los datos que cumplen con la definición del grupo pero no cumplen con las condiciones de la cláusula no se incluyen en el grupo. Para incluir todos los datos, sin importar la condición WHERE, puedes utilizar ALL. Por ejemplo, agregar ALL a la consulta anterior devuelve todos los grupos de códigos postales, no solo los de Kentucky:

SELECT CódigoPostal
FROM Clientes
WHERE Estado = 'KY'
GROUP BY ALL CódigoPostal

En este caso, las dos cláusulas están en conflicto y probablemente no utilizarías ALL de esta manera. Sin embargo, ALL es útil cuando utilizas una función de agregación para evaluar una columna. Por ejemplo, la siguiente consulta cuenta el número de clientes en cada código postal de Kentucky, al tiempo que muestra otros valores de código postal:

SELECT CódigoPostal, Count(CódigoPostal) AS ClientesPorCódigoPostal
FROM Clientes
WHERE Estado = 'KY'
GROUP BY ALL CódigoPostal

Los grupos resultantes incluyen todos los valores de códigos postales en los datos subyacentes. Sin embargo, la columna de agregación (ClientesPorCódigoPostal) mostrará 0 para cualquier grupo que no sea un código postal de Kentucky.

Las consultas remotas no admiten GROUP BY ALL.

Qué es sudo y por qué deberías usarlo

#5: Filtra los datos después de agrupar

La cláusula WHERE (#3) evalúa los datos antes de la cláusula GROUP BY. Si deseas filtrar los datos después de agruparlos, puedes utilizar HAVING. En muchos casos, el resultado será el mismo si utilizas WHERE o HAVING, pero es importante recordar que las cláusulas no son intercambiables. A continuación, te presentamos una buena guía para seguir cuando tengas dudas: utiliza WHERE para filtrar registros y utiliza HAVING para filtrar grupos.

Normalmente, utilizarás HAVING para evaluar un grupo utilizando una función de agregación. Por ejemplo, la siguiente consulta muestra una lista única de códigos postales, pero es posible que la lista no incluya todos los códigos postales en los datos subyacentes:

SELECT CódigoPostal, Count(CódigoPostal) AS ClientesPorCódigoPostal
FROM Clientes
GROUP BY CódigoPostal
HAVING Count(CódigoPostal) = 1

Solo aquellos grupos con un solo cliente se incluirán en los resultados.

#6: Comprende WHERE y HAVING

Si aún tienes dudas sobre cuándo utilizar WHERE y cuándo utilizar HAVING, sigue estas pautas:

  • WHERE se coloca antes de GROUP BY: SQL evalúa la cláusula WHERE antes de agrupar los registros.
  • HAVING se coloca después de GROUP BY: SQL evalúa HAVING después de agrupar los registros.

#7: Resume los valores agrupados con funciones de agregación

Agrupar datos te permite analizarlos, pero a veces necesitarás más información que solo los grupos en sí. Puedes agregar una función de agregación para resumir los datos agrupados. Por ejemplo, la siguiente consulta muestra un subtotal para cada pedido:

SELECT NúmeroDePedido, Sum(Precio * Cantidad) AS TotalDePedido
FROM Pedidos
GROUP BY NúmeroDePedido

Al igual que con cualquier otro grupo, las listas SELECT y GROUP BY deben coincidir. Incluir una función de agregación en la cláusula SELECT es la única excepción a esta regla.

Cómo eliminar registros duplicados en una base de datos de Access

#8: Resume el agregado

Puedes resumir aún más los datos mostrando un subtotal para cada grupo. El operador ROLLUP de SQL muestra un registro adicional, un subtotal, para cada grupo. Este subtotal es el resultado de evaluar todos los registros dentro de cada grupo utilizando una función de agregación. La siguiente consulta muestra el total de la columna TotalDePedido para cada grupo:

SELECT Cliente, NúmeroDePedido, Sum(Precio * Cantidad) AS TotalDePedido
FROM Pedidos
GROUP BY Cliente, NúmeroDePedido
WITH ROLLUP

La fila ROLLUP para un grupo con dos valores de TotalDePedido, 20 y 25, mostrará un TotalDePedido de 45. El primer registro en un resultado ROLLUP es único porque evalúa todos los registros del grupo. Ese valor es un total general para todo el conjunto de registros.

ROLLUP no admite el uso de DISTINCT en las funciones de agregación ni la cláusula GROUP BY ALL.

#9: Resume cada columna

El operador CUBE va un paso más allá que ROLLUP al devolver totales para cada valor en cada grupo. Los resultados son similares a los de ROLLUP, pero CUBE incluye un registro adicional por cada columna del grupo. La siguiente consulta muestra un subtotal para cada grupo y un total adicional para cada cliente:

SELECT Cliente, NúmeroDePedido, Sum(Precio * Cantidad) AS TotalDePedido
FROM Pedidos
GROUP BY Cliente, NúmeroDePedido
WITH CUBE

CUBE proporciona el resumen más completo. No solo realiza el trabajo del agregado y el ROLLUP, sino que también evalúa las demás columnas que definen el grupo. En otras palabras, CUBE resume todas las posibles combinaciones de columnas.

CUBE no admite GROUP BY ALL.

Ventajas de las claves sustitutas en bases de datos relacionales

#10: Ordena los resúmenes

Cuando los resultados de un CUBE son confusos (lo cual suele ser el caso), puedes agregar la función GROUPING de la siguiente manera:

SELECT GROUPING(Cliente), NúmeroDePedido, Sum(Precio * Cantidad) AS TotalDePedido
FROM Pedidos
GROUP BY Cliente, NúmeroDePedido
WITH CUBE

Los resultados incluyen dos valores adicionales para cada fila:

  • El valor 1 indica que el valor a la izquierda es un valor de resumen, es decir, el resultado del operador ROLLUP o CUBE.
  • El valor 0 indica que el valor a la izquierda es un registro de detalle producido por la cláusula GROUP BY original.

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Gestión de datos, allí encontraras muchos artículos similares a 10 Consejos para Ordenar , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.