Sobes.tech
Junior

Ի՞նչ տարբերություն կա SQL-ում WHERE և HAVING կառուցվածքների միջև։

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-ից **հետո** խմբագրման և միջին հաշվարկի