توضیحات

دستور having به همراه group by می‌آید برای اعمال محدودیت بر روی رکوردها که تنها رکوردهایی را برمی‌گرداند که شرط را داشته باشند.

دستور

دستور having در pl/sql به این شکل است:

SELECT expression1, expression2, ... expression_n, 
       aggregate_function (aggregate_expression)
FROM tables
[WHERE conditions]
GROUP BY expression1, expression2, ... expression_n
HAVING having_condition;
پارامترهای دستور

expression1, expression2, expression_n: ستون‌هایی هستند که در توابع تجمعی نمی‌آیند و بر اساس این ستون‌ها رکوردها دسته‌بندی می‌شوند و توابع بر روی آنها اعمال می‌شود.
aggregate_function: توابعی مانند min، max، avg، count می‌توانند در این قسمت قرار گیرند.
Tables: جداولی است که شما انتظار دارید داده‌ها از آن بازیابی شود.
WHERE conditions: شرط اختیاری است. شرطی است که باید رکوردها موقع بازیابی آن را رعایت کنند.
having_condition: این شرط بر روی گروه‌ها اعمال می‌شود و تنها گروه‌هایی در نتیجه می‌آیند که شرط را برقرار کنند.

 

 


مثال

• در مثال زیر رکوردها بر اساس ستون department گروه‌بندی می‌شوند و تنها گروه‌هایی نمایش داده می‌شود که شرط SUM(sales) > 25000 را برقرار کنند.

SELECT department, SUM(sales) AS "Total sales"
FROM order_details
GROUP BY department
HAVING SUM(sales) > 25000;

• در مثال زیر رکوردها بر اساس ستون department گروه‌بندی می‌شوند و تنها گروه‌هایی نمایش داده می‌شود که شرط تعداد کارکنان بیشتر از 10 را رعایت کنند.

SELECT department, COUNT(*) AS "Number of employees"
FROM employees
WHERE salary < 49500 GROUP BY department HAVING COUNT(*) > 10;