ในโลกของการจัดการฐานข้อมูล ข้อมูลส่วนใหญ่มักถูกจัดเก็บในรูปแบบแถว (Rows) และคอลัมน์ (Columns) อย่างเป็นระเบียบ แต่ในหลายกรณีทางธุรกิจ เราอาจต้องการสรุปข้อมูลที่กระจัดกระจายอยู่ในหลายแถว ให้กลายเป็นชุดข้อมูลเดียวในคอลัมน์เดียว ไม่ว่าจะเป็นรายการข้อความที่คั่นด้วยเครื่องหมายจุลภาค หรือชุดข้อมูลที่เป็น Array เพื่อความสะดวกในการแสดงผลหรือการประมวลผล
สำหรับ PostgreSQL ซึ่งเป็นระบบจัดการฐานข้อมูลที่ทรงพลัง มีฟังก์ชันการรวมกลุ่ม (Aggregation Functions) ที่ถูกออกแบบมาเพื่อจัดการสถานการณ์นี้โดยเฉพาะ คือ STRING_AGG() และ ARRAY_AGG() บทความนี้จะเจาะลึกวิธีการใช้ฟังก์ชันเหล่านี้เพื่อเปลี่ยนหลายแถวให้เป็นคอลัมน์เดียวได้อย่างมีประสิทธิภาพ
💡 หลักการทำงาน: การรวมกลุ่มข้อมูล (Aggregation)
เมื่อเราต้องการรวมข้อมูลหลายรายการที่เกี่ยวข้องกับกลุ่มเดียวกัน (เช่น รายชื่อสินค้าทั้งหมดที่อยู่ในหมวดหมู่ ‘เครื่องดื่ม’) เราจำเป็นต้องใช้คำสั่ง GROUP BY ร่วมกับฟังก์ชันรวมกลุ่ม (Aggregate Functions) ซึ่งจะทำการรวบรวมค่าจากหลายแถวให้เหลือเพียงค่าเดียวต่อกลุ่ม
1. การรวมเป็นข้อความ (String Aggregation) ด้วย STRING_AGG()
ฟังก์ชัน STRING_AGG() เหมาะสำหรับการรวมค่าจากหลายแถวให้เป็นข้อความ (String) เดียว โดยเราสามารถกำหนดตัวคั่น (Delimiter) ได้ตามต้องการ เช่น ลูกน้ำ (,) หรือเครื่องหมายขีดกลาง (-)
ตัวอย่างการใช้งาน:
SQL
SELECT
department_id,
STRING_AGG(product_name, ', ')
FROM
products
GROUP BY
department_id;
ผลลัพธ์ที่ได้: หากมีสินค้า ‘A’, ‘B’, และ ‘C’ ในแผนกเดียวกัน ผลลัพธ์จะแสดงเป็นข้อความเดียวคือ: ‘A, B, C’
2. การรวมเป็นอาร์เรย์ (Array Aggregation) ด้วย ARRAY_AGG()
ฟังก์ชัน ARRAY_AGG() เป็นทางเลือกที่ทรงพลังกว่าเมื่อคุณต้องการให้ข้อมูลที่รวมกันยังคงมีโครงสร้างเป็นข้อมูลประเภท Array ของ PostgreSQL ซึ่งมีประโยชน์อย่างยิ่งในการนำข้อมูลไปใช้ในการคำนวณหรือเปรียบเทียบในขั้นตอนถัดไป
ตัวอย่างการใช้งาน:
SQL
SELECT
department_id,
ARRAY_AGG(product_name)
FROM
products
GROUP BY
department_id;
ผลลัพธ์ที่ได้: หากมีสินค้า ‘A’, ‘B’, และ ‘C’ ผลลัพธ์จะแสดงเป็น Array: {A, B, C}
✨ สรุปความแตกต่างและการเลือกใช้
การเลือกระหว่าง STRING_AGG() และ ARRAY_AGG() ขึ้นอยู่กับวัตถุประสงค์ของข้อมูลปลายทาง:
- ใช้
STRING_AGG(): เมื่อคุณต้องการแสดงผลข้อมูลในรูปแบบข้อความที่อ่านง่าย (เช่น รายการสินค้าบนหน้าเว็บ) และไม่จำเป็นต้องนำข้อมูลนั้นไปคำนวณต่อในฐานข้อมูล - ใช้
ARRAY_AGG(): เมื่อคุณต้องการให้ข้อมูลที่รวมกันยังคงเป็นโครงสร้างข้อมูลที่สามารถนำไปใช้ในการประมวลผลทางตรรกะ (Logic) หรือการคำนวณทางฐานข้อมูลต่อได้
✅ บทสรุป
การทำความเข้าใจฟังก์ชัน STRING_AGG() และ ARRAY_AGG() ใน PostgreSQL เป็นทักษะสำคัญสำหรับนักพัฒนาและสถาปนิกฐานข้อมูลที่ต้องการดึงข้อมูลสรุปในรูปแบบที่ยืดหยุ่นและมีประสิทธิภาพ การใช้ฟังก์ชันเหล่านี้จะช่วยให้คุณสามารถแปลงข้อมูลแบบหลายแถวให้เป็นคอลัมน์เดียวได้อย่างแม่นยำ ทำให้การรายงานและการแสดงผลข้อมูลมีความสมบูรณ์ยิ่งขึ้น