Biroq, u ROLLUP yoki CUBE bilan birlashtirilishi mumkin. Misol uchun, har bir guruh uchun qatorlarni umumlashtirishdan tashqari, keling, barcha guruhlar uchun jamlovchi qator qo'shamiz:
Qavslar yanada murakkab guruhlash stsenariylarini aniqlash uchun ishlatilishi mumkin:
OVER
OVER ifodasi yig'ilgan ma'lumotlarni olish uchun ishlatilgan qatorlarni qaytarish paytida ma'lumotlarni yig'ish imkonini beradi. Masalan, ishlab chiqaruvchilar bo'yicha modellar sonini va ushbu modellarning umumiy tovarlari sonini topamiz:
OVER bandi agregat funksiyasidan keyin, keyin esa qavs ichida PARTITION BY bandi va guruhlash bajariladigan ustun qo‘yiladi.
Ya'ni, bu holda biz model nomini, ishlab chiqaruvchini, model birliklari sonini tanlaymiz va bunga ushbu ishlab chiqaruvchi uchun modellar sonini va ishlab chiqaruvchining barcha modellari birliklarining umumiy sonini qo'shamiz:
Quyi soʻrovlar
Pastki so'rovlarni bajarish
T-SQL pastki so'rovlar (pastki so'rovlar), ya'ni boshqa so'rovlarga kiritilishi mumkin bo'lgan so'rovlarni qo'llab-quvvatlaydi.
Masalan, mahsulotlar, mijozlar va buyurtmalar uchun jadvallar tuzamiz:
Buyurtmalar jadvalida ProductId va CustomerId maydonlari orqali ikkita boshqa jadvalga havolalar mavjud.
Keling, jadvallarga bir nechta ma'lumotlarni qo'shamiz:
Bu erda qiziqish Buyurtmalar jadvaliga elementlarni qo'shishdir. Misol uchun, birinchi buyurtmani xaridor Tom Galaxy S8 mahsulotiga bergan. Shunga ko'ra, buyurtma haqidagi ma'lumotlarni Buyurtmalar jadvalida saqlashimiz kerak, bu erda ProductId maydoni Galaxy S8 mahsulotining identifikatorini, Narx maydonida uning narxini va CustomerId maydonida Tom mijozining identifikatorini ko'rsatadi. Ammo so'rovni yozish paytida biz na xaridorning identifikatorini, na mahsulot identifikatorini, na mahsulot narxini bilmasligimiz mumkin. Bunday holda siz pastki so'rovni bajarishingiz mumkin.
Quyi so'rov SELECT operatorini bajaradi va qavslar ichiga olinadi. Bunday holda, bitta mahsulotni qo'shganda, uchta pastki so'rov bajariladi. Har bir quyi so'rov raqamli identifikator kabi bitta skaler qiymatni qaytaradi.
Bunday holda, quyi so'rovlar boshqa jadvalga nisbatan bajarilgan, lekin ular asosiy so'rov chaqirilgan bir xil jadvalga nisbatan ham bajarilishi mumkin. Masalan, mahsulotlar jadvalidan minimal narxga ega mahsulotlarni topamiz:
Yoki narxi o'rtachadan yuqori bo'lgan mahsulotlarni toping:
O'zaro bog'liq pastki so'rovlar
Quyi so'rovlar o'zaro bog'liq yoki bog'liq bo'lmagan bo'lishi mumkin. Yuqoridagi misollarda SELECT buyruqlari haqiqatda butun buyruq uchun bitta quyi soʻrovni bajargan, masalan, quyi soʻrov asosiy soʻrovda qancha qatorni tanlasak ham oʻzgarmaydigan minimal yoki oʻrtacha narxni qaytaradi. Ya'ni, pastki so'rov natijasi asosiy so'rovda tanlangan qatorlarga bog'liq emas edi. Va bunday pastki so'rov butun tashqi so'rov uchun bir marta bajariladi.
Lekin o'zaro bog'langan pastki so'rovlar ham mavjud (korrelyatsiya qilingan pastki so'rovlar), ularning natijalari asosiy so'rovda tanlangan qatorlarga bog'liq.
Masalan, buyurtmalar jadvalidan barcha buyurtmalarni tanlab, ularga mahsulot ma'lumotlarini qo'shamiz:
Bu erda Buyurtmalar jadvalining har bir satri uchun pastki so'rov bajariladi, uning natijasi ProductId ustuniga bog'liq. Va har bir quyi so'rov turli xil ma'lumotlarni qaytarishi mumkin.
Korrelyatsiya qilingan pastki so'rov ham asosiy so'rov bilan bir xil jadvalda bajarilishi mumkin. Masalan, "Mahsulotlar" jadvalidan narxi ma'lum bir ishlab chiqaruvchi uchun tovarlarning o'rtacha narxidan yuqori bo'lgan tovarlarni tanlaymiz:
Bunday holda, ikkita o'zaro bog'liq pastki so'rovlar aniqlanadi. Birinchi quyi so'rov AvgPrice ustunining spetsifikatsiyasini belgilaydi. U Mahsulotlar jadvalidan olingan har bir qator uchun bajariladi. Tovar ishlab chiqaruvchisi quyi so'rovga o'tkaziladi va uning asosida ushbu ishlab chiqaruvchining tovarlari uchun o'rtacha narx tanlanadi. Va tovar ishlab chiqaruvchisi farq qilishi mumkinligi sababli, har bir holatda pastki so'rovning natijasi ham farq qilishi mumkin.
Ikkinchi quyi so'rov o'xshash, faqat u Mahsulotlar jadvalidan olinganlarni filtrlash uchun ishlatiladi. Shuningdek, u har bir qator uchun bajariladi.
Ishlab chiqaruvchilarni (SubProds.Manufacturer=Prods.Manufacturer) solishtirganda, quyi soʻrovda filtrlashda ikkilanishni oldini olish uchun tashqi tanlov uchun Prods taxalluslari oʻrnatiladi va pastki soʻrovlardan tanlash uchun SubProds taxalluslari belgilanadi.
Yodda tutingki, korrelyatsiya qiluvchi pastki so'rovlar tanlovning har bir alohida qatori uchun bajariladi, keyin bunday pastki so'rovlarning bajarilishi butun so'rovning bajarilishini sekinlashtirishi mumkin.
Do'stlaringiz bilan baham: |