SQL window funksiyalar (OVER, PARTITION BY)

GROUP BY qatorlarni yig’ib, guruh uchun bitta natija berardi. Ba’zan esa har qatorni saqlab, ustiga guruh bo’yicha hisob qo’shish kerak bo’ladi — masalan “har mahsulotning o’z toifasidagi o’rni”. Buni window funksiyalar bajaradi.

OVER — qatorni yo’qotmasdan hisoblash

Window funksiya OVER (...) bilan yoziladi. Har mahsulotga toifasidagi o’rnini beramiz:

SELECT nom, turi, narx,
  ROW_NUMBER() OVER (PARTITION BY turi ORDER BY narx DESC) AS orin
FROM mahsulotlar;

O’zingiz ishga tushirib ko’ring — so’rovni tahrirlashingiz ham mumkin:

SQL · namuna baza

Natija — barcha qator saqlanadi, ustiga orin qo’shildi:

nom turi narx orin
Guruch don 18000 1
Choy ichimlik 15000 1
Suv ichimlik 4000 2
Banan meva 14000 1
Olma meva 8000 2
Non non 3000 1
Sut sut mahsuloti 12000 1
Qatiq sut mahsuloti 9000 2
  • PARTITION BY turi — hisobni har toifa uchun alohida yuritadi.
  • ORDER BY narx DESC — toifa ichida narx bo’yicha tartiblaydi.
  • ROW_NUMBER() — har qatorga tartib raqami beradi.

Amaliy mashq

Oyna funksiyalarini sinang:

  1. ROW_NUMBER() bilan har toifada narx bo’yicha o’rin bering;
  2. PARTITION BY ni olib tashlang — raqamlash qanday o’zgardi?
  3. RANK() ga almashtiring va farqni kuzating;
  4. SUM(narx) OVER (ORDER BY id) bilan o’suvchi yig’indi hisoblang;
  5. shu natijani GROUP BY bilan olishga urinib ko’ring.

5-qadam window funksiya va GROUP BY farqini aniq ko’rsatadi.

Qisqacha xulosa

  • Window funksiya qatorlarni yig’masdan, guruh bo’yicha hisob qo’shadi.
  • OVER (...) — funksiyaning “oynasini” belgilaydi.
  • PARTITION BY — oynani guruhlarga bo’ladi; ORDER BY — ichida tartiblaydi.
  • ROW_NUMBER() tartib raqami; RANK(), SUM() OVER ham bor.
  • GROUP BY dan farqi: har qator natijada saqlanadi.

Keyingi darsda CTE (WITH) — murakkab so’rovni nomlangan bo’laklarga bo’lib, o’qishga qulay qilishni ko’ramiz.

Bu dars foydali bo'ldimi?

marta ko'rildi