Saltar al contenido

OVER

SQL · Unidad 13: Funciones de ventana

Luis, el cliente 2, ha hecho tres pedidos, de 5, de 2 y de 1 unidades. ¿Cuánto pesa cada uno en todo lo que se ha llevado? Para decirlo hace falta tener el total, 8, junto a cada pedido. Y eso es lo que un agregado no dejaba hacer. En la unidad 5 viste que un solo agregado en el SELECT convierte la consulta entera en un resumen, y de tres filas queda una.

OVER (), detrás del agregado, le quita esa costumbre. El SUM hace la misma suma y, en vez de juntar las filas, deja el resultado al lado de cada una. Las tres siguen ahí.

SELECT id, cantidad,
  SUM(cantidad) OVER () AS total
FROM pedidos
WHERE cliente_id = 2;

Devuelve

idcantidadtotal
358
628
1218

El resto de la explicación está en la lección, que es del plan completo.

Ejercicios de esta lección

Se hacen en la app, que los corrige al momento y explica por qué.

  1. 1. Predice la salida

    En la unidad 5, alguien tenía la lista de los tres accesorios y quiso añadirle una columna que dijera cuántos son. El COUNT(*) le dejó una sola fila. En la unidad 9 se resolvió con una subconsulta que volvía a contar para cada producto. Esta es la tercera forma. ¿Qué devuelve?

  2. 2. Predice la salida

    El 12 de enero entraron dos pedidos, el 7, de 1 unidad, y el 8, de 3. En la tienda entera van 30 unidades pedidas. ¿Qué devuelve esta consulta?

  3. 3. Completa el código

    Ana, la clienta 1, ha hecho tres pedidos, de 2, de 1 y de 1 unidades. Junto a cada uno tiene que salir el más grande de los tres. Completa el agregado y lo que hace que deje las filas como están.

  4. 4. Ordena las líneas

    El encargado cuenta la sección de Accesorios. Ordena la consulta que da cada accesorio con sus unidades y, al lado, las que suma la sección entera, del que más hay al que menos. Sobran dos líneas.

  5. 5. Completa el código

    La pregunta con la que empezó la lección. ¿Qué parte de las 8 unidades de Luis fue cada pedido? Completa la cuenta para que salga en porcentaje, con sus decimales.

  6. 6. Encuentra el bug

    Valeria, la clienta 5, ha hecho dos pedidos, de 1 y de 3 unidades. Alguien quiere saber qué parte es cada uno. La consulta corre y devuelve una sola fila. ¿Qué línea tiene el problema?

  7. 7. Ordena las líneas

    El Cable, el producto 4, es lo más pedido de la tienda. ¿Cuánto pesan sus pedidos en las 30 unidades pedidas? Ordena la consulta que da la cantidad de cada pedido del Cable junto al total de toda la tienda, del más pequeño al más grande. Sobran dos líneas.

  8. 8. Opción múltiple

    No todo lo que habla de un total pide una ventana. ¿Cuál de estas preguntas se contesta con un agregado a secas, sin OVER?

  9. 9. Escribe el código

    ¿Qué parte de lo que ha vendido la tienda viene de cada cliente? El paso por_cliente ya está escrito, y es el resumen de la unidad 10, con lo que ha gastado cada cliente que ha pedido algo. Debajo, escribe la consulta con tres columnas en este orden, el nombre, el dinero y la parte del total que es ese dinero, en porcentaje y redondeada a un decimal. Primero quien más ha gastado.

Hacer esta lección

Se abre en el navegador. Esta lección es del plan completo; la primera unidad de cada curso es gratis.

Ver todas las lecciones →