Junior
Тафовут дар байни сохторҳои WHERE ва HAVING дар SQL чист?
sobes.tech AI
Ҷавоб аз AI
WHERE, сатрҳоро пеш аз гурӯҳбандӣ (GROUP BY) филтр мекунад, таъсир мерасонад ба он, ки кадом сатрҳо дар функсияҳои ҷамъоварӣ иштирок мекунанд. HAVING гурӯҳҳоро пас аз гурӯҳбандӣ филтр мекунад, бар асоси натиҷаҳои функсияҳои ҷамъоварӣ.
| Хусусият | WHERE | HAVING |
|---|---|---|
| Барнома | Ба сатрҳои инфиродӣ | Ба гурӯҳҳои сатрҳо |
| Вақти коркард | Пеш аз GROUP BY | Пас аз GROUP BY |
| Истифода | Бо майдонҳо аз ҷадвал, аммо бе функсияҳои ҷамъоварӣ | Бо натиҷаҳои функсияҳои ҷамъоварӣ ё майдонҳо аз GROUP BY |
Маслиҳат барои истифодаи WHERE:
SELECT номи маҳсулот, нарх
FROM маҳсулот
WHERE category_id = 1; -- Филтр мекунад сатрҳоро **пеш аз** гурӯҳбандӣ (агар лозим бошад)
Маслиҳат барои истифодаи HAVING:
SELECT category_id, COUNT(*) AS умумии_маҳсулот
FROM маҳсулот
GROUP BY category_id
HAVING COUNT(*) > 5; -- Филтр мекунад гурӯҳҳоро **пас аз** ҳисоб кардани шумораи умумии маҳсулот
Маслиҳат барои истифодаи муштарак:
SELECT category_id, AVG(нарх) AS миёнаи_нарх
FROM маҳсулот
WHERE захира > 0 -- Филтр мекунад танҳо маҳсулоти дар захира **пеш аз** гурӯҳбандӣ
GROUP BY category_id
HAVING AVG(нарх) < 100; -- Филтр мекунад гурӯҳҳоро бо нархи миёна камтар аз 100 **пас аз** гурӯҳбандӣ ва ҳисоб кардани миёна