PostgreSQLAdvanced
Window Functions — rank, row_number, over
GROUP BY ছাড়া row-wise ranking/aggregation — OVER().
5টি অংশবাংলা ভাষায়
Window function গ্রুপের ভেতরে প্রতিটি row-এর পাশাপাশি ফলাফল দেয় — aggregate-এর মতো গ্রুপ collapsed করে না।
user পার-এর সর্বশেষ ordersql
sql
SELECT u.name, o.total, o.created_at, rn
FROM (
SELECT o.*, u.name,
ROW_NUMBER() OVER (
PARTITION BY o.user_id
ORDER BY o.created_at DESC
) AS rn
FROM orders o JOIN users u ON u.id = o.user_id
) ranked
WHERE ranked.rn = 1;| Function | কাজ |
|---|---|
| ROW_NUMBER() | ক্রমিক নম্বর (প্রতি উইন্ডো) |
| RANK() / DENSE_RANK() | সমান মানে-এ same rank |
| LAG / LEAD | আগের/পরের row-এর মান |
| SUM() OVER | রানিং total (partition-ভিত্তিক) |
-- রানিং total
SELECT created_at::date AS day, total,
SUM(total) OVER (ORDER BY created_at::date) AS running
FROM orders
ORDER BY created_at::date;কখন নয়
Window functions প্রায়ই সুদৃশ্য, তবে বড় scan-এ cost হয় — সচেতনভাবে ব্যবহার করুন। Top-N-এ filter করতে subquery/CTE-তে wrap জরুরি (WHERE-এ window function চলে না)।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।