ALL kalit so'zi. Ba'zi SQL ilovalari (masalan, Microsoft SQL Server) GROUP BY bandidagi majburiy bo’lmagan ALL kalit so'zini qo'llab-quvvatlaydi. U barcha guruhlarni, hatto mos keladigan qatorlarga ega bo'lmagan guruhlarni ham olish uchun ishlatilishi mumkin (bu holda natijada funksiya NULL ni qaytaradi)
Eslatma. Ustunlarni nisbiy joylashuvi bo'yicha belgilash. Ba'zi SQL ilovalari GROUP BY bandidagi ustunlarni SELECT iborasi ro'yxatidagi joylashuvi bo'yicha belgilash imkonini beradi. Misol uchun, "GURUH BY 2,1" iborasi olinadigan ikkinchi ustun bo'yicha, keyin esa birinchi bo'yicha guruhlashni anglatishi mumkin. Ushbu stenogramma sintaksisi juda qulay bo'lsa-da, uni barcha SQL ilovalari qo'llab-quvvatlamaydi. Uning ishlatilishi, shuningdek, SQL bayonotlarini tahrirlashda xatoliklarning yuzaga kelishi ehtimoli juda yuqori bo'lgan ma'noda ham xavflidir.
Guruh bo’yicha filtrlash
SQL sizga GROUP BY bandidan foydalangan holda nafaqat ma'lumotlarni guruhlash, balki ularni filtrlash imkonini beradi, ya'ni so'rov natijalariga qaysi guruhlarni kiritish kerakligini va qaysi guruhlarni ulardan chiqarib tashlash kerakligini ko'rsating.
Ammo WHERE bandi o'rniga nima ishlatilishi kerak? SQL-da bu maqsad uchun mos keladigan boshqa band mavjud: HAVING. Bu WHERE bandiga juda o'xshaydi. Darhaqiqat, siz allaqachon tanish bo'lgan WHERE bandidagi barcha turdagi iboralar HAVING bandida amal qiladi. Yagona farq shundaki, WHERE qatorlarni filtrlaydi va HAVING guruhlarni filtrlaydi.
HAVING bandi barcha WHERE band operatorlarini qo'llab-quvvatlaydi.
SELECT cust_id, COUNT(*) AS orders FROM Orders GROUP BY cust_id HAVING COUNT(*) >= 2;
cust id orders
1000000001 2
Ushbu so'rovning dastlabki uchta satri avval muhokama qilingan SELECT iborasiga o'xshaydi. Biroq, oxirgi qatorda COUNT (*) >= 2 - ikki yoki undan ortiq buyurtma ifodasi yordamida guruhlarni filtrlaydigan HAVING bandi mavjud.
Ko'rib turganingizdek, WHERE bandi bu yerda ishlamaydi, chunki filtrlash tanlangan qatorlar qiymatlariga emas, balki guruhning umumiy qiymatiga asoslanadi.
|