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