Introduction
CTEs let you break complex queries into smaller parts. Referencing one CTE inside another helps organize and reuse query parts clearly.
WITH cte1 AS ( -- first query ), cte2 AS ( SELECT * FROM cte1 WHERE condition ) SELECT * FROM cte2;
WITH first_cte AS ( SELECT id, name FROM employees ), second_cte AS ( SELECT id FROM first_cte WHERE name LIKE 'A%' ) SELECT * FROM second_cte;
WITH numbers AS ( SELECT 1 AS num UNION ALL SELECT 2 UNION ALL SELECT 3 ), squares AS ( SELECT num, num * num AS square FROM numbers ) SELECT * FROM squares;
WITH sales AS ( SELECT product_id, quantity FROM orders ), total_sales AS ( SELECT product_id, SUM(quantity) AS total_quantity FROM sales GROUP BY product_id ) SELECT * FROM total_sales WHERE total_quantity > 10;
WITH first_cte AS ( SELECT 1 AS num UNION ALL SELECT 2 UNION ALL SELECT 3 ), second_cte AS ( SELECT num * 10 AS val FROM first_cte WHERE num > 1 ) SELECT * FROM second_cte ORDER BY val;
WITH cte1 AS ( SELECT id, name FROM users ), cte2 AS ( SELECT id, name FROM cte3 WHERE id > 5 ) SELECT * FROM cte2;
sales_cte with columns (product_id, total_sales) and products_cte with columns (product_id, product_name). How do you write a query using CTE referencing another CTE to get product names with sales over 1000?Pass the test and this pattern moves unknown