دستور HAVING در SQL
این دستور شبیه به WHERE
عمل میکند با این تفاوت که دستور HAVING
میتواند همراه با aggregate functions
استفاده شود.
این دستور بیشتر مواقع همراه با GROUP BY
استفاده میشود و نتیجه آن را فیلتر میکند.
نمونه استفاده:
SELECT OrderKey,
SUM(Amount) AS TotalSales
FROM MyTable
GROUP BY OrderKey
HAVING SUM(Amount) > 50000
ORDER BY OrderKey;
یک مثال دیگر:
SELECT
CustomerId,
YEAR (OrderDate),
COUNT (OrderId) OrderCount
FROM
sales.orders
GROUP BY
CustomerId,
YEAR (OrderDate)
HAVING
COUNT (OrderId) >= 2
ORDER BY
CustomerId;
اگر یک aggregate function
در بخش SELECT بیاید، حتما باید آن را در بخش HAVING هم بیاوردی. همانند مثال بالا که تابع COUNT آمده است.
دلیل استفاده از این دستور این است که بطور مثال نمیتوان بصورت زیر از دستور COUNT استفاده کرد:
SELECT
CustomerId,
COUNT (OrderId) OrderCount
FROM
sales.orders
WHERE COUNT(OrderId) > 100
GROUP BY
CustomerId
ORDER BY
CustomerId;
یک مثال دیگر میتواند بصورت زیر باشد که میخواهیم لیست مشتریانی که جمع سفارش آنها بیشتر از 100000 است را پیدا کنیم، برای این کار میتوان بصورت زیر عمل کرد:
SELECT Customer,
SUM(OrderPrice)
FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice) > 2000
اطلاعات بیشتر:
having
دستور HAVING بر روی فقط برروی دیتا grouped شده اعمال میشود اما دستور where بر روی دیتای تکی: