SQL

GROUP_CONCAT

عملگر گروهی GROUP_CONCAT در PostgreSQL

عملگر GROUP_CONCAT در PostgreSQL برای ترکیب چندین مقدار از یک ستون به یک رشته واحد، زمانی که از آن ستون گروه‌بندی می‌کنیم، استفاده می‌شود. این عملگر به خصوص در مواردی مفید است که می‌خواهیم اطلاعات مرتبط با هر گروه را در یک رشته واحد جمع‌آوری کنیم.

نحو استفاده

SQL
GROUP_CONCAT(expression [ORDER BY expression [ASC | DESC]] [SEPARATOR ','])
  • expression: عبارت یا ستونی که مقادیر آن باید ترکیب شوند.
  • ORDER BY: برای مرتب‌سازی مقادیر قبل از ترکیب آن‌ها استفاده می‌شود.
  • ASC | DESC: برای تعیین جهت مرتب‌سازی (صعودی یا نزولی) استفاده می‌شود.
  • SEPARATOR: کاراکتر یا رشته‌ای که برای جدا کردن مقادیر استفاده می‌شود. اگر مشخص نشود، کاما (,) به عنوان جداکننده پیش‌فرض استفاده می‌شود.

مثال

فرض کنید جدولی به نام orders داریم که شامل ستون‌هایی مانند order_id و product_name است. می‌خواهیم برای هر مشتری، لیستی از محصولاتی که خریداری کرده است را در یک رشته جدا شده با کاما نمایش دهیم.

SQL
SELECT customer_id, GROUP_CONCAT(product_name) AS products
FROM orders
GROUP BY customer_id;

در این مثال:

  • GROUP_CONCAT(product_name) تمام مقادیر ستون product_name را برای هر customer_id منحصر به فرد ترکیب می‌کند.
  • AS products یک نام مستعار برای ستون جدیدی که ایجاد می‌شود، قرار می‌دهد.

مثال با مرتب‌سازی و جداکننده سفارشی

SQL
SELECT customer_id, GROUP_CONCAT(product_name ORDER BY product_name DESC SEPARATOR '; ') AS products
FROM orders
GROUP BY customer_id;

در این مثال:

  • مقادیر product_name قبل از ترکیب به صورت نزولی مرتب می‌شوند.
  • از کاراکتر ; به عنوان جداکننده استفاده می‌شود.

مثال عددی برای عملگر GROUP_CONCAT در PostgreSQL

فرض کنید جدولی به نام orders با ساختار زیر داریم:

order_id customer_id product_name
۱۰۰۱ ۱ سیب
۱۰۰۲ ۱ موز
۱۰۰۳ ۱ پرتقال
۱۰۰۴ ۲ انگور
۱۰۰۵ ۲ سیب
۱۰۰۶ ۳ موز

می‌خواهیم برای هر مشتری، لیستی از محصولات خریداری شده را در یک رشته جدا شده با کاما نمایش دهیم.

Query:

SQL
SELECT customer_id, GROUP_CONCAT(product_name) AS products
FROM orders
GROUP BY customer_id;

نتیجه:

customer_id products
۱ سیب, موز, پرتقال
۲ انگور, سیب
۳ موز

تفسیر:

  • برای هر customer_id منحصر به فرد، تمام مقادیر product_name مربوط به آن مشتری جمع‌آوری شده و در یک رشته با جداکننده کاما قرار گرفته است.

مثال دیگر با مرتب‌سازی و جداکننده سفارشی:

فرض کنید می‌خواهیم محصولات هر مشتری را به ترتیب حروف الفبا و با جداکننده خط تیره نمایش دهیم:

SQL
SELECT customer_id, GROUP_CONCAT(product_name ORDER BY product_name ASC SEPARATOR ' - ') AS products
FROM orders
GROUP BY customer_id;

نتیجه:

customer_id products
۱ سیب – موز – پرتقال
۲ انگور – سیب
۳ موز

در این مثال:

  • محصولات هر مشتری به ترتیب حروف الفبا مرتب شده‌اند.
  • از خط تیره (-) به عنوان جداکننده استفاده شده است.

مثال با محدود کردن تعداد محصولات نمایش داده شده:

فرض کنید می‌خواهیم حداکثر دو محصول اول هر مشتری را نمایش دهیم:

این کار به صورت مستقیم با GROUP_CONCAT امکان‌پذیر نیست، اما می‌توانیم از یک زیر پرسجو برای محدود کردن نتایج و سپس GROUP_CONCAT را روی نتایج زیر پرسجو اعمال کنیم.

SQL
SELECT customer_id, GROUP_CONCAT(product_name) AS products
FROM (
  SELECT customer_id, product_name
  FROM orders
  ORDER BY product_name
  LIMIT 2
) AS limited_products
GROUP BY customer_id;

این مثال‌ها نشان می‌دهند که GROUP_CONCAT ابزاری بسیار قدرتمند برای ترکیب داده‌ها در PostgreSQL است و با استفاده از آن می‌توان گزارش‌های پیچیده‌تری ایجاد کرد.

نکات مهم

  • تابع جمع‌شونده: GROUP_CONCAT یک تابع جمع‌شونده است و معمولاً با عبارت GROUP BY استفاده می‌شود.
  • طول رشته: حداکثر طول رشته‌ای که توسط GROUP_CONCAT ایجاد می‌شود، توسط پارامتر group_concat_max_len در فایل postgresql.conf قابل تنظیم است.
  • NULL values: مقادیر NULL به طور پیش‌فرض نادیده گرفته می‌شوند.
  • تابع STRING_AGG: در نسخه‌های جدیدتر PostgreSQL، تابع STRING_AGG نیز برای انجام همین کار استفاده می‌شود و برخی ویژگی‌های اضافی را ارائه می‌دهد.

کاربردهای رایج

  • گزارش‌گیری: برای ایجاد گزارش‌هایی که اطلاعات مربوط به چندین سطر را در یک سطر نمایش می‌دهند.
  • ساخت منوها و لیست‌های کشویی: برای ایجاد لیست‌های کشویی دینامیک در برنامه‌های وب.
  • تجزیه و تحلیل داده: برای تجزیه و تحلیل داده‌ها و ایجاد خلاصه‌های مفید.

مثال عملی دیگر:

فرض کنید جدولی به نام employees داریم که شامل ستون‌هایی مانند department_id و employee_name است. می‌خواهیم برای هر بخش، لیستی از کارمندان را به صورت حروف الفبا نمایش دهیم.

SQL
SELECT department_id, GROUP_CONCAT(employee_name ORDER BY employee_name ASC) AS employees
FROM employees
GROUP BY department_id;

جمع‌بندی:

GROUP_CONCAT یک ابزار قدرتمند در PostgreSQL است که به شما امکان می‌دهد داده‌ها را به روش‌های مختلف خلاصه و نمایش دهید. با درک نحوه کار این تابع، می‌توانید گزارش‌ها و تحلیل‌های پیچیده‌تری را ایجاد کنید.

 

۵/۵ ( ۱ امتیاز )
نمایش بیشتر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا