Junior
SQLda WHERE va HAVING tuzilmalari orasidagi farq nima?
sobes.tech AI
AIdan javob
WHERE satrlarni guruhlashdan (GROUP BY) oldin filtrlash, qaysi satrlar agregat funksiyalarida qatnashishini ta'sir qiladi. HAVING guruhlarni guruhlashdan keyin filtrlash, agregat funksiyalarining natijalariga asoslanadi.
| Xususiyat | WHERE | HAVING |
|---|---|---|
| Qo'llanilishi | Yakuniy satrlarga | Guruhlarga |
| Ishlash vaqti | GROUP BYdan oldin | GROUP BYdan keyin |
| Foydalanish | Jadvaldagi maydonlar bilan, lekin siz funksiyalar bilan emas | Aggregat funksiyalarining natijalari yoki GROUP BY maydonlari bilan |
WHEREdan foydalanish misoli:
SELECT mahsulot_nomi, narx
FROM mahsulotlar
WHERE category_id = 1; -- Guruhlashdan **oldin** satrlarni filtrlash (agar bo'lsa)
HAVINGdan foydalanish misoli:
SELECT category_id, COUNT(*) AS umumiy_mahsulotlar
FROM mahsulotlar
GROUP BY category_id
HAVING COUNT(*) > 5; -- Umumiy mahsulot sonini hisoblagandan **keyin** guruhlarni filtrlash
Birgalikda foydalanish misoli:
SELECT category_id, AVG(narx) AS o'rtacha_narx
FROM mahsulotlar
WHERE stock > 0 -- Faqat mavjud mahsulotlarni **guruhlashdan** **oldin** filtrlash
GROUP BY category_id
HAVING AVG(narx) < 100; -- O'rtacha narxi 100 dan kam bo'lgan guruhlarni **guruhlashdan** **keyin** filtrlash