Sobes.tech
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 **пас аз** гурӯҳбандӣ ва ҳисоб кардани миёна