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-ის, **შემდეგ** ჯგუფირებისა და საშუალოს გამოთვლის