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