Lecciones del módulo (1/3)
Introducción a las CTEs (WITH)
Introducción a los CTE (CON)
Tarde o temprano, le sucede a todo el mundo: necesita filtrar datos según el resultado de una agregación, luego tomar ese filtro y UNIRLO con otra consulta agregada. Comienzas a escribir un SELECT dentro de un SELECT, que a su vez termina en el FROM de otro SELECT.
¿El resultado? Spaghetti SQL, una consulta ilegible para cualquier ser humano.
CTE (Expresiones de tabla comunes) le permiten desenredar este lío. Los activa con la palabra clave WITH, que le permite definir consultas con nombre temporales y luego reutilizarlas como "tablas virtuales" en la consulta final.
Sintaxis básica
WITH premium_customers AS (
SELECT customer_id, SUM(total_amount) AS total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(total_amount) > 1000
)
SELECT customers.first_name, premium_customers.total_spent
FROM customers
JOIN premium_customers ON customers.id = premium_customers.customer_id;Como puede ver, la consulta principal en la parte inferior se lee desde premium_customers como si fuera una tabla real. Y es mucho más legible que una mega unión interna con subconsultas anidadas.
Queremos productos muy caros. Utilice un CTE llamado 'productos_de lujo' para seleccionar 'id' y 'precio' de 'productos' donde 'precio > 500'. Luego ejecuta una consulta principal sobre este CTE y muestra todo (*).
Mostrar pista
Comience con CON productos_de_lujo COMO (...) luego SELECCIONE * DE productos_de_lujo.
Solución disponible después de 3 intentos
Queremos encontrar usuarios que escriban reseñas. Cree un CTE 'revisores' que extraiga los valores únicos (DISTINCT) de 'customer_id' de las 'revisiones'. Luego extraiga 'id', 'first_name', 'last_name' de la tabla 'clientes' y `JOIN` con el CTE de 'revisores' en id.
Mostrar pista
CON revisores COMO (SELECCIONE DISTINTO id_cliente DE revisiones) SELECCIONE id, nombre, apellido DE clientes ÚNASE a revisores EN clientes.id = revisores.cliente_id;
Solución disponible después de 3 intentos