پاسخ به:آموزش SQL
دوشنبه 10 آذر 1393 10:22 PMآموزش SQL-عبارت Having
عبارت HAVING
Wiki
چون که عبارت WHERE نمی تواند به همراه توابع aggregate استفاده شود عبارت HAVING در SQL به همراه توابع aggregate آورده می شود.
فرم عبارت HAVING:
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
مثال:
Wiki
جدول Orders را در زیر داریم:
| O_Id | OrderDate | OrderPrice | Customer |
|---|---|---|---|
| 1 | 2008/11/12 | 1000 | Hansen |
| 2 | 2008/10/23 | 1600 | Nilsen |
| 3 | 2008/09/02 | 700 | Hansen |
| 4 | 2008/09/03 | 300 | Hansen |
| 5 | 2008/08/30 | 2000 | Jensen |
| 6 | 2008/10/04 | 100 | Nilsen |
می خواهیم مشتریانی که جمع سفارش آنها کمتر از 2000 است را پیدا کنیم.
از دستور زیر استفاده می کنیم:
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000
GROUP BY Customer
HAVING SUM(OrderPrice)<2000
نتیجه به شکل زیر خواهد بود:
| Customer | SUM(OrderPrice) |
|---|---|
| Nilsen | 1700 |
می خواهیم اگر مشتریان "Hansen" یا "Jensen" جمع سفارش بیشتر از 1500 دارند را نشان دهد.
یک عبارت WHERE به دستور SQL اضافه می شود.
SELECT Customer,SUM(OrderPrice) FROM Orders
WHERE Customer='Hansen' OR Customer='Jensen'
GROUP BY Customer
HAVING SUM(OrderPrice)>1500
WHERE Customer='Hansen' OR Customer='Jensen'
GROUP BY Customer
HAVING SUM(OrderPrice)>1500
جدول نتیجه به شکل زیر خواهد بود:
| Customer | SUM(OrderPrice) |
|---|---|
| Hansen | 2000 |
| Jensen | 2000 |