0Pricing
SQL Interview Prep · Lección

Agrupar por varias columnas y expresiones

Use claves de agrupación compuestas y agrupe por valores calculados

Agrupar por varias columnas y expresiones es una lección gratuita de SQL Interview Prep en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Interview Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Interview Prep incluye 4 lecciones en total.

Más allá de una sola clave de agrupación

Los informes reales rara vez agrupan por una sola columna. Los entrevistadores pasan de «ventas por región» a «ventas por región y por mes» para comprobar si entiende las claves de agrupación compuestas.

La regla se amplía sin cambios: indicar más columnas en GROUP BY crea una fila por cada combinación distinta de esas columnas.

Qué significan varias columnas

Cuando escribe GROUP BY region, product, la clave de agrupación es el par (region, product). Cada par único se convierte en una fila de salida.

  • 5 regiones y 4 productos producen hasta 20 grupos.
  • Las combinaciones que nunca aparecen no producen ninguna fila.
  • El orden de las columnas en GROUP BY no cambia el conjunto de resultados, aunque a veces sí cambia el plan.
SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY region, product;

Siga respetando la regla de SELECT

La restricción fundamental no se relaja. Toda columna de SELECT que no sea una función de agregación debe aparecer en GROUP BY. Con claves compuestas, simplemente debe enumerarlas todas.

Olvidar una columna en un grupo con varias claves es el error más común bajo la presión de una entrevista. Haga coincidir exactamente la lista de GROUP BY con las columnas de SELECT que no sean agregados.

-- Both region and product appear in GROUP BY
SELECT region, product,
       COUNT(*) AS orders,
       AVG(amount) AS avg_amount
FROM sales
GROUP BY region, product;

Agrupar por una expresión

Puede agrupar por un valor calculado, no solo por una columna sin modificar. Una petición frecuente es agrupar las ventas por mes, lo que implica agrupar por una fecha truncada o por una parte extraída de ella.

La expresión de GROUP BY debe coincidir con la expresión de SELECT. El motor agrupa según el resultado calculado.

SELECT DATE_TRUNC('month', order_date) AS month,
       SUM(amount) AS monthly_total
FROM sales
GROUP BY DATE_TRUNC('month', order_date);

Agrupar mediante categorías CASE

Un patrón muy útil consiste en agrupar mediante una expresión CASE para crear categorías personalizadas. Así puede generar resúmenes de «pedidos pequeños, medianos y grandes» sin una tabla auxiliar.

A los entrevistadores les gusta este caso porque comprueba a la vez la lógica de CASE y la agrupación por un valor derivado.

SELECT CASE
         WHEN amount < 50  THEN 'small'
         WHEN amount < 200 THEN 'medium'
         ELSE 'large'
       END AS bucket,
       COUNT(*) AS orders
FROM sales
GROUP BY CASE
         WHEN amount < 50  THEN 'small'
         WHEN amount < 200 THEN 'medium'
         ELSE 'large'
       END;

Agrupar por posición de columna

Muchos dialectos permiten agrupar por posición ordinal: GROUP BY 1, 2 significa la primera y la segunda columna de SELECT. Es conciso, pero frágil.

Los entrevistadores pueden aceptarlo, pero tenga en cuenta el riesgo: reordenar la lista de SELECT cambia la agrupación silenciosamente. En el código de producción, prefiera expresiones explícitas.

-- 1 = month expression, 2 = region
SELECT DATE_TRUNC('month', order_date) AS month,
       region, SUM(amount)
FROM sales
GROUP BY 1, 2;

Los valores NULL forman su propio grupo

Esta es una trampa relacionada con el tratamiento de NULL en las agrupaciones: cuando una columna de agrupación contiene NULL, todas las filas con NULL se agrupan en un único grupo.

Esto difiere de las comparaciones de igualdad, en las que NULL nunca es igual a NULL. A efectos de agrupación, los valores NULL se tratan como «iguales» y forman una sola categoría. A los entrevistadores les encanta esta aparente contradicción.

-- Rows with region IS NULL all land in one group
SELECT region, COUNT(*) AS orders
FROM sales
GROUP BY region;

GROUPING SETS para varios niveles

Para producir varios niveles de granularidad en una sola consulta, use GROUPING SETS. Calcula cada conjunto de claves indicado y une los resultados.

Esto demuestra un nivel intermedio o sénior: en lugar de tres consultas independientes más UNION, una sola instrucción devuelve conjuntamente los totales por región, por producto y el total general.

SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS ((region), (product), ());

ROLLUP y CUBE

ROLLUP y CUBE son formas abreviadas de conjuntos de agrupación habituales. ROLLUP(region, product) proporciona región y producto, subtotales por región y un total general, lo que resulta ideal para informes jerárquicos.

CUBE genera todas las combinaciones de las columnas indicadas. Conocer estas opciones distingue a una persona candidata que ha creado consultas de informes reales.

SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY ROLLUP (region, product);

Ejemplo resuelto: informe mensual por región

Combine las ideas: obtenga las ventas totales y medias por región y por mes, solo para los pedidos completados, y ordénelas para facilitar la lectura.

WHERE reduce primero las filas, la clave compuesta agrupa por la región y la expresión del mes, y ORDER BY organiza la salida. Esta es una respuesta completa típica en una entrevista para analistas.

SELECT region,
       DATE_TRUNC('month', order_date) AS month,
       SUM(amount) AS total,
       AVG(amount) AS avg_order
FROM sales
WHERE status = 'completed'
GROUP BY region, DATE_TRUNC('month', order_date)
ORDER BY region, month;

Cómo explicar su razonamiento en voz alta

Para cualquier pregunta sobre agrupaciones compuestas, indique la clave explícitamente: «Estoy agrupando por la combinación de X e Y, así que obtengo una fila por cada par distinto (X, Y)».

Después, confirme que cada columna de SELECT que no sea un agregado está incluida en esa clave y mencione que los valores NULL se agrupan en un solo grupo. Los entrevistadores de nivel intermedio valoran esta explicación metódica.

Comprobación rápida

Razone sobre las claves de agrupación compuestas.

Resumen

Claves compuestas: indicar varias columnas produce una fila por cada combinación distinta; toda columna de SELECT que no sea un agregado debe estar incluida en la clave.

  • Puede agrupar por expresiones, categorías CASE o posiciones ordinales, aunque las posiciones son frágiles.
  • Los valores NULL de una columna de agrupación se agrupan en un único grupo.
  • GROUPING SETS, ROLLUP y CUBE producen varios niveles de agrupación en una sola consulta.
  • Aplique los filtros de filas en WHERE antes de agrupar.

Preguntas frecuentes

¿La lección «Agrupar por varias columnas y expresiones» es gratis?

Sí — el texto completo de «Agrupar por varias columnas y expresiones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Interview Prep, actualiza a CoddyKit PRO. El curso de SQL Interview Prep incluye 4 lecciones en total.

¿Qué aprenderé en «Agrupar por varias columnas y expresiones»?

Use claves de agrupación compuestas y agrupe por valores calculados Practicas SQL Interview Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar SQL Interview Prep?

No se requiere experiencia previa. SQL Interview Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Agrupar por varias columnas y expresiones»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de SQL Interview Prep?

Sí. Cada lección de SQL Interview Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. La regla de GROUP BY para las columnas de SELECT
  2. HAVING frente a WHERE
  3. Agrupar por varias columnas y expresiones
  4. Contar y filtrar grupos
← Volver a SQL Interview Prep