50-Mavzu: HAVING ning qo‘llanilishi.
Reja:
1. WHERE bandida jamlash
2. HAVING ning qo‘llanilishi
3. O'sish tartibida saralashda
Faraz qilaylik, oldingi misolda siz faqat 90000 dan ortiq xarid qilishning maksimal miqdorini ko‘rishni xohlaysiz. WHERE bandida jamlash funksiyasidan foydalana olmaysiz (agar siz quyida tavsiflangan quyi so‘rovdan foydalanmasangiz), chunki predikatlar quyidagicha baholanadi. bir qatorning shartlari va agregat funktsiyalari qatorlar guruhlari bo'yicha baholanadi. Bu shuni anglatadiki, siz quyidagi kabi ishni qila olmaysiz:
BNum, MAX (SSsum) ni tanlang
FROM sotadi
QAYERDA MAX(SSsum)>90000
BNum BO'YICHA GURUHLASH
Bu SQL qoidalaridan voz kechish bo'ladi . Maksimal xarid qiymatini 90000 dan ortiq ko'rish uchun HAVING bandidan foydalanishingiz mumkin . HAVING bandi alohida satrlar uchun WHERE bandida bo'lgani kabi, guruhlashdan keyin ma'lum guruhlarni chiqishdan olib tashlash uchun ishlatiladigan mezonlarni belgilaydi . To'g'ri buyruq quyidagicha bo'ladi:
BNum, MAX (SSsum) ni tanlang
FROM sotadi
BNum BO'YICHA GURUHLASH
MAXS (SSsum)>90000
Bnum
|
MAX SOʻM
|
2
|
192000
|
bitta
|
100000
|
HAVING bandidagi argumentlar GROUP BY yordamida buyruqlarning SELECT bandidagi kabi qoidalarga amal qiladi , lekin ular har bir chiqish guruhi uchun bitta qiymatga ega bo‘lishi kerak. Quyidagi buyruq taqiqlanadi:
BNum, SDate, MAX(SSsum) ni tanlang
FROM sotadi
BNum, SDate BO'YICHA GURUHLASH
HAVING SDate="17.02.01"
SDate maydonini HAVING bandi bilan chaqirib bo'lmaydi, chunki u har bir chiqish guruhida bir nechta qiymatga ega bo'lishi mumkin. Bunday vaziyatga yo'l qo'ymaslik uchun HAVING bandi faqat GROUP BY tomonidan tanlangan agregatlarga yoki butun maydonlar to'plamiga murojaat qilishi kerak . Yuqoridagi so'rovni amalga oshirishning to'g'ri yo'li bor:
BNum, MAX (SSsum) ni tanlang
FROM sotadi
WHERE SDate="17.02.01"
BNum BO'YICHA GURUHLASH
Ko'pgina ma'lumotlar bazasini boshqarish tizimlari so'rov natijalarini yaxshilash uchun maxsus vositalarni taqdim etadi.
Aytaylik, siz ma'lumotni ehtiyojlaringizga mosroq shaklga qo'yish uchun oddiy raqamli hisob-kitoblarni amalga oshirmoqchisiz. SQL skalyar ifodalar va konstantalarni tanlangan maydonlar orasiga joylashtirish imkonini beradi. Masalan, mahsulotning kelajakdagi narxini ikki barobarga oshirishni hisobga olgan holda qarash kerak. Buning uchun biz quyidagi so'rovdan foydalanamiz:
Tovarlardan GTame, GTypeNum, GPrice*2 ni tanlang
Natijada biz quyidagilarni olamiz:
Do'stlaringiz bilan baham: |