PostgreSQL

سرفصل دروس

HAVING

مقدمه ای بر دستور HAVING در PostgreSQL

اکثرا از HAVING در ترکیب ها به همراه دستور GROUP BY برای فیلتر مجموعه ای از ردیف ها که یک شرط خاص را برآورده نمی کنند استفاده می کنیم. در زیر دستور زبان ساده دستور HAVING را مشاهده می نمایید:

SELECT
 column_1,
 aggregate_function (column_2)
FROM
 tbl_name
GROUP BY
 column_1
HAVING
 condition;

دستور HAVING مجموعه ای از شرط ها را برای ردیف هایی که توسط GROUP BY ایجاد شده اند را اعمال می کند. این دستور بعد از GROUP BY اعمال می شود در صورتیکه WHERE قبل از GROUP BY اعمال می شود و این تفاوت اصلی این دو دستور می باشد. 

در PostgreSQL شما می توانید دستور HAVING را بدون GROUP BY نیز استفاده نمایید. در این صورت HAVING نتیجه را بصورت یک گروه واحد بر می گرداند. درواقع اگر شروط درست باشد یک ردیف برگردانده می شود و اگر شروط درست نباشد هیچ ردیفی برگردانده نمی شود. 

 

مثال HAVING در PostgreSQL

به جدول payment توجه نمایید: 

جدول payment

 

دستور HAVING به همراه تابع SUM 

پرس و جوی زیر مقدار کل خرید هر مشتری را نمایش می دهد:

SELECT
 customer_id,
 SUM (amount)
FROM
 payment
GROUP BY
 customer_id;

دستور HAVING به همراه تابع SUM 

شما می توانید HAVING را اعمال نمایید تا فقط مشتری هایی نمایش داده شود که مقدار خرید آنها بیش از 200 بوده است:

SELECT
 customer_id,
 SUM (amount)
FROM
 payment
GROUP BY
 customer_id
HAVING
 SUM (amount) > 200;

مشتری هایی که مقدار خرید آنها بیش از 200 بوده است

 

دستور HAVING به همراه تابع COUNT

به جدول customer توجه نمایید:

جدول customer

 

پرس و جوی زیر تعداد مشتریان هر فروشگاه را نمایش می دهد:

SELECT
 store_id,
 COUNT (customer_id)
FROM
 customer
GROUP BY
 store_id

تعداد مشتریان هر فروشگاه

 

شما می توانید با اضافه کردن دستور HAVING فروشگاه هایی را انتخاب نمایید که بیش از 300 مشتری دارند: 

SELECT
 store_id,
 COUNT (customer_id)
FROM
 customer
GROUP BY
 store_id
HAVING
 COUNT (customer_id) > 300;

فروشگاه هایی که بیش از 300 مشتری دارند

اشتراک گذاری :