# Window Functions और CTEs (MySQL 8) — MySQL Fundamentals: SQL, Joins और Transactions

Source: https://www.geekswithgeeks.com/hi/mysql/sql-window-functions-cte

> Window functions से rows rank करें और running totals निकालें, और common table expressions से जटिल queries संरचित करें।

## Window functions

Window function संबंधित rows पर गणना करता है पर GROUP BY की तरह उन्हें collapse नहीं करता। `ROW_NUMBER()`, `RANK()` और `SUM() OVER` सबसे आम हैं।

```sql
SELECT customer_id, amount,
       RANK() OVER (PARTITION BY customer_id ORDER BY amount DESC) AS rnk,
       SUM(amount) OVER (PARTITION BY customer_id ORDER BY created_at) AS running_total
FROM orders;
```

## WITH के साथ CTEs

Common table expression subquery को नाम देता है ताकि लंबी query ऊपर से नीचे पढ़ी जा सके।

```sql
WITH big_orders AS (
  SELECT customer_id, SUM(amount) AS total
  FROM orders
  GROUP BY customer_id
  HAVING SUM(amount) > 2000
)
SELECT c.name, b.total
FROM big_orders b
JOIN customers c ON c.id = b.customer_id;
```

Window functions और CTEs के लिए MySQL 8.0 या नया चाहिए। Ranking और running totals के लिए self-joins और गहरे nested subqueries की जगह इन्हें उपयोग करें।

त्वरित जाँच

**Quiz:** Window function GROUP BY से कैसे अलग है?

- [x] यह computed value जोड़ते हुए हर row रखता है
- [ ] यह duplicate rows हटाता है
- [ ] यह नई table बनाता है
- [ ] यह केवल text पर काम करता है

*Answer:* यह computed value जोड़ते हुए हर row रखता है. Window functions rows को collapse किए बिना rows की window पर गणना करते हैं।
