Todas las publicaciones
post17 de mayo de 2026

Top 3 productos por categoría — función ventana SQL

#sql#window-functions#challenge
Medium⏱️ Logic Challenge
Given a "products" table with columns (id, category, name, revenue), return the top 3 products by revenue within each category.
Ver solución
WITH ranked AS ( SELECT id, category, name, revenue, ROW_NUMBER() OVER ( PARTITION BY category ORDER BY revenue DESC ) AS rnk FROM products ) SELECT id, category, name, revenue FROM ranked WHERE rnk <= 3;

Rankear dentro de grupos es un patrón de query que verás en toda entrevista DE. GROUP BY simple colapsa grupos en una fila cada uno, que no es lo que quieres — necesitas las top N filas por grupo, manteniendo todo el detalle.

Las window functions resuelven esto. ROW_NUMBER() OVER (PARTITION BY category ORDER BY revenue DESC) numera cada fila dentro de su categoría, rankeada por revenue. Después filtras para quedarte solo con los rangos 1 a 3.