SQL

Window Function vs N+1 Query

admin by @admin ADMIN
1d ago
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
Don't fetch a list, then loop in code to count each parent's children. Use a window function or a single GROUP BY — turn 1,001 queries into 1.
SQL
Raw
-- ❌ The N+1 anti-pattern (in your app):
--   users = SELECT * FROM users;
--   for u in users:
--     count = SELECT COUNT(*) FROM orders WHERE user_id = u.id;  -- N more queries!

-- ✓ One query with a JOIN + GROUP BY
SELECT u.id, u.email, COUNT(o.id) AS order_count
FROM   users u
LEFT   JOIN orders o ON o.user_id = u.id
GROUP  BY u.id, u.email;

-- ✓ Same idea with a correlated subquery (simpler when you only need one aggregate)
SELECT u.id, u.email,
       (SELECT COUNT(*) FROM orders WHERE user_id = u.id) AS order_count
FROM   users u;

-- ✓ Show user + recent orders inline using JSON_AGG (PostgreSQL)
SELECT u.id, u.email,
       (SELECT json_agg(o ORDER BY o.created_at DESC)
        FROM (SELECT id, amount, created_at FROM orders
              WHERE user_id = u.id ORDER BY created_at DESC LIMIT 5) o
       ) AS recent_orders
FROM   users u;
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.