Saltar al contenido

Subconsultas por fila

SQL · Unidad 9: Subconsultas

¿Es caro un Teclado de 45.5? En la tienda entera es de lo barato, porque el promedio pasa de 200. Entre los accesorios es el más caro. Para decir si algo es caro hay que compararlo con los suyos.

Una subconsulta en el SELECT pone junto a cada producto el promedio de su sección. Nombra pr.categoria, que es de la fila de afuera, así que se resuelve una vez por cada fila, como las de EXISTS. Adentro y afuera está la misma tabla, y x es la copia de adentro. Esta subconsulta ocupa una casilla, y por eso tiene que dar un solo valor.

SELECT pr.nombre, pr.precio,
  (
    SELECT AVG(x.precio)
    FROM productos x
    WHERE x.categoria = pr.categoria
  ) AS de_su_seccion
FROM productos pr
WHERE pr.precio < 100;

Devuelve

nombrepreciode_su_seccion
Teclado45.523.55
Ratón19.923.55
Cable5.2523.55
Audífonos59.966.95
Parlante7466.95

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 Pantallas solo está el Monitor, de 189. En Equipos están el Portátil, de 899, y la Tableta, de 320. Son los tres productos de más de 100. ¿Qué devuelve esta consulta?

  2. 2. Completa el código

    Una subconsulta por fila puede ir a buscar un dato a otra tabla. Junto a cada pedido de Luis, el cliente 2, falta el nombre del producto. Sus pedidos son el 3, el 6 y el 12, y llevan los productos 2, 3 y 6. Completa con la columna de la fila de afuera que dice qué producto buscar.

  3. 3. Predice la salida

    ¿Cuántas veces se ha pedido cada producto de Audio? De los Audífonos hay dos pedidos. Del Parlante, ninguno. ¿Qué devuelve esta consulta?

  4. 4. Encuentra el bug

    La lista de los ocho clientes con cuántos pedidos ha hecho cada uno. Ana y Luis tienen 3, y Camila y Bruno, ninguno. La consulta corre y le pone un 3 a todo el mundo. ¿Qué línea tiene el problema?

  5. 5. Ordena las líneas

    El local de Lima quiere saber cuándo compró por última vez cada uno de sus tres clientes. Ordena la consulta que da el nombre y esa fecha, que queda vacía para quien no ha comprado. Sobran dos líneas.

  6. 6. Ordena las líneas

    ¿Qué pedidos fueron grandes para quien los hizo? Un pedido de 2 unidades es poco para Luis y mucho para Ana. Ordena la consulta que da los pedidos con más unidades que el promedio de su propio cliente, por número de pedido, de mayor a menor. Sobran dos líneas.

  7. 7. Opción múltiple

    productos tiene 8 filas. En la consulta que compara cada producto con el máximo de su sección, ¿cuántas veces hay que resolver la subconsulta, tal como está escrita?

  8. 8. Completa el código

    El primer pedido de cada cliente lleva una tarjeta de bienvenida. ¿Cuáles fueron? Completa la subconsulta para que cada pedido se compare con la fecha más antigua de su propio cliente.

  9. 9. Escribe el código

    La pregunta con la que empezó la lección, para toda la tienda. Escribe una consulta con tres columnas en este orden, el nombre, la categoría y el precio de los productos que cuestan más que el promedio de su propia categoría. En orden alfabético por nombre. Afuera, productos lleva el alias pr, y adentro, x.

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 →