SQL

Test de SQL: agregaciones y GROUP BY

Practica 50 casos de PostgreSQL sobre COUNT, SUM, AVG, GROUP BY, HAVING, agregación condicional y funciones de ventana.

Cada intento mezcla preguntas y respuestas para evitar patrones memorizables.

Cargando preguntas…

Qué vas a practicar

Este banco plantea resúmenes de datos reales: contar filas, sumar importes, calcular medias, formar grupos, filtrar agregados y mantener el detalle con funciones de ventana. Cada ejercicio exige identificar el nivel de agregación y anticipar el resultado.

  • Diferenciar COUNT(*), COUNT(columna) y COUNT(DISTINCT).
  • Construir GROUP BY y HAVING coherentes.
  • Interpretar NULL, grupos vacíos y tipos de resultado.
  • Evitar totales inflados y aplicar FILTER, CASE y funciones de ventana.

Preguntas de ejemplo

Los ejemplos siguientes pertenecen al banco interactivo y conservan exactamente la misma respuesta y explicación.

1Una tabla tiene varias filas y algunas columnas contienen NULL. Al usar COUNT(*), ¿qué se cuenta?

Respuesta: El número de filas del grupo, aunque alguna columna sea NULL

Explicación: COUNT(*) cuenta filas de entrada y no depende del contenido de una columna concreta. COUNT(*) cuenta filas; COUNT(columna) solo cuenta valores no nulos, por lo que pueden producir resultados distintos.

2Después de agrupar departamentos, solo quieres conservar los que cumplen una condición sobre el agregado. ¿Qué cláusula corresponde?

Respuesta: HAVING

Explicación: HAVING filtra grupos después de que GROUP BY y las funciones agregadas hayan calculado sus resultados. Por eso puede expresar condiciones como COUNT(*) > 5, que todavía no existen durante WHERE.

3¿Cómo se agrupa por año y mes en PostgreSQL conservando un valor temporal representativo?

Respuesta: GROUP BY date_trunc('month', fecha)

Explicación: date_trunc reduce cada marca temporal al inicio del mes, de modo que todas las del mismo mes comparten clave. Agrupar por una expresión reúne las filas que producen el mismo resultado calculado, no necesariamente el mismo valor original.

4¿Qué función de PostgreSQL concatena valores de texto de un grupo con un separador?

Respuesta: string_agg(expresion, separador)

Explicación: string_agg reúne los valores no nulos y coloca el delimitador indicado entre ellos. El ORDER BY interno controla el orden de concatenación; el ORDER BY externo solo ordena las filas finales.

5¿Cómo se calcula una media ponderada de nota con peso?

Respuesta: SUM(nota * peso) / NULLIF(SUM(peso), 0)

Explicación: La suma de productos se divide por la suma de pesos; NULLIF evita división por cero. La media ponderada es SUM(valor * peso) / SUM(peso); promediar medias simples puede dar un resultado sesgado.

6¿Qué afirmación sobre ORDER BY y GROUP BY es correcta?

Respuesta: GROUP BY define grupos; ORDER BY solo ordena las filas finales

Explicación: El agrupamiento no promete orden de salida; debe añadirse ORDER BY si el orden importa. GROUP BY define conjuntos para calcular; ORDER BY solo decide la secuencia de las filas resultantes.

Cómo aprovechar la práctica

Distingue primero filas de entrada, grupos y filas de salida. Comprueba cómo se tratan los NULL, qué columnas deben agruparse y si el filtro corresponde a WHERE o HAVING; en funciones de ventana, separa partición y orden.

Fuentes y alcance

Las preguntas se han revisado con la documentación oficial vigente de PostgreSQL 18.4 sobre funciones agregadas, GROUP BY, HAVING y funciones de ventana. Revisión técnica: 21 de agosto de 2026.

Documentación consultada: PostgreSQL 18.4: Aggregate Functions · PostgreSQL 18.4: Aggregate tutorial · PostgreSQL 18.4: Window Functions