Pencere fonksiyonları (OVER / PARTITION BY)
Oracle
SELECT ad, departman, maas,
ROW_NUMBER() OVER (PARTITION BY departman ORDER BY maas DESC) AS sira,
RANK() OVER (PARTITION BY departman ORDER BY maas DESC) AS derece,
LAG(maas) OVER (PARTITION BY departman ORDER BY maas) AS onceki
FROM calisan;Pencere fonksiyonları satırları gruplamadan (satır sayısını azaltmadan) her satır için bir 'pencere' üzerinde hesap yapar. PARTITION BY pencereyi böler, ORDER BY sıralar. Oracle bu analitik fonksiyonların öncüsüdür; ROW_NUMBER, RANK, DENSE_RANK, LAG/LEAD, SUM() OVER gibi zengin bir set sunar.
PostgreSQL
SELECT ad, departman, maas,
ROW_NUMBER() OVER w AS sira,
RANK() OVER w AS derece,
LEAD(maas) OVER w AS sonraki
FROM calisan
WINDOW w AS (PARTITION BY departman ORDER BY maas DESC);PostgreSQL tüm standart pencere fonksiyonlarını destekler ve tekrar eden pencere tanımını WINDOW ... AS ile adlandırmaya izin verir. ROWS/RANGE/GROUPS çerçeve (frame) tanımıyla hareketli toplam, kayan ortalama gibi hesaplar yapılır.
MySQL
SELECT ad, departman, maas,
ROW_NUMBER() OVER (PARTITION BY departman ORDER BY maas DESC) AS sira,
DENSE_RANK() OVER (PARTITION BY departman ORDER BY maas DESC) AS derece,
LAG(maas) OVER (PARTITION BY departman ORDER BY maas) AS onceki
FROM calisan;MySQL 8.0 (ve MariaDB 10.2+) pencere fonksiyonlarını destekler; öncesinde kullanıcı değişkenleri veya alt sorgularla taklit edilirdi. ROW_NUMBER, RANK, DENSE_RANK, NTILE, LAG/LEAD, FIRST_VALUE/LAST_VALUE ve toplama fonksiyonlarının OVER biçimi kullanılabilir.
SQL Server
SELECT ad, departman, maas,
ROW_NUMBER() OVER (PARTITION BY departman ORDER BY maas DESC) AS sira,
RANK() OVER (PARTITION BY departman ORDER BY maas DESC) AS derece,
SUM(maas) OVER (PARTITION BY departman) AS dept_toplam
FROM calisan;SQL Server 2005'ten beri sıralama pencere fonksiyonlarını, 2012'den beri çerçeveli toplama ve LAG/LEAD gibi fonksiyonları destekler. ROW_NUMBER genelde sayfalama (OFFSET/FETCH ile) ve grup içi ilk N kaydı bulmada kullanılır.
MongoDB
// En yakın karşılık: $setWindowFields (MongoDB 5.0+)
db.calisan.aggregate([
{ $setWindowFields: {
partitionBy: "$departman",
sortBy: { maas: -1 },
output: { sira: { $rank: {} },
onceki: { $shift: { output: "$maas", by: -1 } } }
} }
])MongoDB 5.0+ $setWindowFields aşaması SQL pencere fonksiyonlarının karşılığıdır: partitionBy ve sortBy ile pencere tanımlanır, $rank/$denseRank/$documentNumber, $shift (LAG/LEAD), kayan toplam gibi çıktılar üretilir. Eski sürümlerde $group + kod ile çözülürdü.
Redis
# Uygulanamaz: Redis'te pencere fonksiyonu yoktur.Redis analitik pencere fonksiyonu sunmaz. Sıralı sonuç ve derecelendirme için Sorted Set (ZSET) yapısı kullanılır: ZADD ile skor verir, ZRANK/ZREVRANK ile sıra, ZRANGE ile aralık okunur. Karmaşık analitik uygulamada yapılır.
Elasticsearch
# En yakın karşılık: top_hits ve pipeline agregasyonları
GET calisan/_search
{
"size": 0,
"aggs": { "dept": { "terms": { "field": "departman" },
"aggs": { "en_yuksek": { "top_hits": {
"sort": [ { "maas": "desc" } ], "size": 3 } } } } }
}Elasticsearch'te doğrudan pencere fonksiyonu yoktur. Grup içi ilk N kayıt için 'top_hits' alt agregasyonu, kayan/kümülatif hesaplar için 'derivative', 'cumulative_sum', 'moving_fn' gibi pipeline agregasyonları kullanılır. Sıralama ve bölme terms agregasyonuyla yapılır.