Window funksiyalar agregat funksiyalardan farqli ravishda qatorlarni o'chirmaydi.

ROW_NUMBER

-- Har bir talabani raqamlash
SELECT 
    ROW_NUMBER() OVER (ORDER BY baho DESC) AS raqam,
    ism,
    baho
FROM talabalar;

-- Shahar bo'yicha raqamlash
SELECT 
    ROW_NUMBER() OVER (PARTITION BY shahar ORDER BY baho DESC) AS raqam,
    ism,
    shahar,
    baho
FROM talabalar;

RANK va DENSE_RANK

SELECT 
    ism,
    baho,
    RANK() OVER (ORDER BY baho DESC) AS rank,
    DENSE_RANK() OVER (ORDER BY baho DESC) AS dense_rank
FROM talabalar;
-- RANK: 1,2,2,4 (3 o'tkazib yuboriladi)
-- DENSE_RANK: 1,2,2,3 (o'tkazib yuborilmaydi)

LAG va LEAD

-- Oldingi oylik savdo bilan solishtirish
SELECT 
    oy,
    savdo,
    LAG(savdo, 1) OVER (ORDER BY oy) AS oldingi_oy,
    savdo - LAG(savdo, 1) OVER (ORDER BY oy) AS farq
FROM oylik_savdo;

SUM va AVG window

-- Kumulyativ yig'indi
SELECT 
    sana,
    miqdor,
    SUM(miqdor) OVER (ORDER BY sana) AS kumulyativ
FROM savdolar;

-- Harakatlanuvchi o'rtacha (3 kunlik)
SELECT 
    sana,
    miqdor,
    AVG(miqdor) OVER (
        ORDER BY sana 
        ROWS BETWEEN 2 PRECEDING AND CURRENT ROW
    ) AS harakatlanuvchi_ortacha
FROM savdolar;