.
1. การใช้งานพื้นฐานของฟังก์ชัน MySQL GROUP_CONCAT()
GROUP_CONCAT() เป็นฟังก์ชันรวมของ MySQL ที่ทำการต่อค่าจากหลายแถวให้เป็นสตริงเดียว ซึ่งช่วยให้คุณรวมข้อมูลหลายชิ้นเป็นฟิลด์เดียวได้อย่างมีประสิทธิภาพ โดยเฉพาะอย่างยิ่งเมื่อคุณต้องการแสดงผลลัพธ์ที่สรุปหรือรวมกันอย่างรวดเร็ว
ไวยากรณ์พื้นฐาน
ไวยากรณ์พื้นฐานของ GROUP_CONCAT() มีดังนี้
SELECT GROUP_CONCAT(column_name) FROM table_name GROUP BY column_name;
ฟังก์ชันนี้มักใช้ร่วมกับคำสั่ง GROUP BY ตัวอย่างเช่น คำสั่งต่อไปนี้จะแสดงชื่อพนักงานที่จัดกลุ่มตามแผนก
SELECT department, GROUP_CONCAT(employee_name) FROM employees GROUP BY department;
ผลลัพธ์จะเป็นชื่อพนักงานของแต่ละแผนกในรูปแบบสตริงคั่นด้วยเครื่องหมายคอมม่า
2. ตัวเลือกการปรับแต่งสำหรับ GROUP_CONCAT()
ฟังก์ชัน GROUP_CONCAT() ทำมากกว่าการต่อค่าเพียงอย่างเดียว—มันให้คุณปรับแต่งได้หลายแบบ คุณสามารถเปลี่ยนตัวคั่น, ลบค่าที่ซ้ำกัน, และกำหนดลำดับการเรียงเพื่อการใช้งานขั้นสูงได้
2.1 การเปลี่ยนตัวคั่น
โดยค่าเริ่มต้น GROUP_CONCAT() จะคั่นค่าด้วยเครื่องหมายคอมม่า อย่างไรก็ตามคุณสามารถเปลี่ยนตัวคั่นได้โดยใช้คีย์เวิร์ด SEPARATOR ตัวอย่างเช่น การคั่นชื่อพนักงานด้วยเครื่องหมายเซมิโคลอน
SELECT department, GROUP_CONCAT(employee_name SEPARATOR '; ') AS employees
FROM employees
GROUP BY department;
คำสั่งนี้จะแสดงชื่อพนักงานที่คั่นด้วยเซมิโคลอน
2.2 การลบค่าที่ซ้ำกัน
โดยค่าเริ่มต้น GROUP_CONCAT() จะรวมค่าที่ซ้ำกันทั้งหมด แต่คุณสามารถลบค่าที่ซ้ำได้โดยใช้คีย์เวิร์ด DISTINCT ตัวอย่างต่อไปนี้เป็นคำสั่งที่กำจัดชื่อพนักงานที่ซ้ำกัน
SELECT department, GROUP_CONCAT(DISTINCT employee_name) AS employees
FROM employees
GROUP BY department;
2.3 การเรียงลำดับผลลัพธ์
คุณสามารถควบคุมลำดับขององค์ประกอบที่ต่อกันภายใน GROUP_CONCAT() ได้โดยใช้คำสั่ง ORDER BY เพื่อเรียงค่าตามลำดับจากน้อยไปมากหรือมากไปน้อย ตัวอย่างต่อไปนี้เรียงชื่อพนักงานตามตัวอักษร
SELECT department, GROUP_CONCAT(employee_name ORDER BY employee_name ASC) AS employees
FROM employees
GROUP BY department;
คำสั่งนี้ต่อชื่อพนักงานในลำดับอักษร หากต้องการเรียงจากมากไปน้อยให้ใช้ DESC
3. กรณีการใช้งานขั้นสูงของ GROUP_CONCAT()
3.1 การสร้างรายการสินค้าแยกตามหมวดหมู่
คุณสามารถใช้ GROUP_CONCAT() เพื่อสร้างรายการชื่อสินค้าสำหรับแต่ละหมวดหมู่ ตัวอย่างเช่น คำสั่งต่อไปนี้ดึงชื่อสินค้าเรียงตามตัวอักษรภายในแต่ละหมวดหมู่
SELECT category, GROUP_CONCAT(product_name ORDER BY product_name ASC) AS product_list
FROM products
GROUP BY category;
ผลลัพธ์จะแสดงดังนี้
category product_list
Electronics Laptop, Phone, TV
Furniture Sofa, Table

3.2 การต่อหลายคอลัมน์เข้าด้วยกัน
เมื่อรวมหลายคอลัมน์ด้วย GROUP_CONCAT() คุณสามารถเชื่อมคอลัมน์เข้าด้วยกันโดยใช้ตัวคั่นที่กำหนดเอง ตัวอย่างต่อไปนี้เชื่อมรหัสสินค้าและชื่อสินค้าด้วยเครื่องหมายโคลอนและต่อเป็นสตริงเดียว
SELECT category, GROUP_CONCAT(CONCAT(product_id, ':', product_name) ORDER BY product_name) AS product_info
FROM products
GROUP BY category;
คำสั่งนี้จะคืนค่ารหัสสินค้าและชื่อสินค้าที่รวมกันสำหรับแต่ละหมวดหมู่
4. ข้อจำกัดและการปรับจูนประสิทธิภาพของ GROUP_CONCAT()
เมื่อใช้ GROUP_CONCAT() จะมีขีดจำกัดความยาวผลลัพธ์เริ่มต้นที่ 1024 ตัวอักษร นอกจากนี้เมื่อจัดการกับชุดข้อมูลขนาดใหญ่ ประเด็นด้านประสิทธิภาพก็จะกลายเป็นสิ่งสำคัญ
4.1 การเปลี่ยนความยาวสตริงสูงสุด
หากความยาวสูงสุดเริ่มต้นไม่เพียงพอ คุณสามารถแก้ไขการตั้งค่าระหว่างเซสชันเพื่อเพิ่มความยาวผลลัพธ์ที่อนุญาตได้ ตัวอย่างต่อไปนี้ตั้งค่าความยาวสูงสุดของเซสชันเป็น 10,000 ไบต์
SET SESSION group_concat_max_len = 10000;
.
ด้วยการกำหนดค่านี้ คุณสามารถดึงผลลัพธ์ได้อย่างถูกต้องแม้จากชุดข้อมูลขนาดใหญ่
4.2 การเพิ่มประสิทธิภาพการทำงาน
เมื่อทำงานกับข้อมูลจำนวนมาก GROUP_CONCAT() อาจทำให้ประสิทธิภาพเป็นปัญหา โดยเฉพาะการใช้ DISTINCT และ ORDER BY บ่อยครั้งอาจทำให้เวลาในการประมวลผลเพิ่มขึ้น เพื่อเพิ่มประสิทธิภาพ ให้พิจารณาจุดต่อไปนี้
- ใช้ดัชนี: การเพิ่มดัชนีให้กับคอลัมน์ที่ใช้ในเงื่อนไข
GROUP BYสามารถปรับปรุงประสิทธิภาพของคิวรีได้อย่างมีนัยสำคัญ - กำหนดความยาวสูงสุดที่เหมาะสม: ปรับค่า
group_concat_max_lenตามความต้องการเพื่อหลีกเลี่ยงการสร้างชุดผลลัพธ์ที่ใหญ่เกินความจำเป็น
5. การเปรียบเทียบกับฟังก์ชันรวมอื่น ๆ
GROUP_CONCAT() แตกต่างจากฟังก์ชันรวมอื่น ๆ (เช่น COUNT() และ SUM()) เนื่องจากมันทำการต่อข้อมูลเป็นสตริงเดียว ในส่วนนี้ เราจะอธิบายความแตกต่างระหว่าง GROUP_CONCAT() กับ COUNT()
5.1 ความแตกต่างจาก COUNT()
COUNT() เป็นฟังก์ชันที่ใช้ในการนับจำนวนแถวที่ตรงกับเงื่อนไขที่กำหนดไว้ ในขณะที่ GROUP_CONCAT() ทำการต่อและแสดงผลสตริง, COUNT() จะคืนค่าตัวเลข ตัวอย่างเช่น คิวรีต่อไปนี้จะนับจำนวนพนักงานในแต่ละแผนก:
SELECT department, COUNT(employee_id) AS employee_count
FROM employees
GROUP BY department;
ซึ่งทำให้คุณสามารถนับจำนวนพนักงานที่อยู่ในแต่ละแผนกได้
6. สรุป
GROUP_CONCAT() เป็นหนึ่งในฟังก์ชันรวมที่ยืดหยุ่นที่สุดใน MySQL เนื่องจากมันรวมข้อมูลเป็นสตริงเดียวและอนุญาตให้ปรับแต่งและใช้งานขั้นสูงได้ จึงมีประสิทธิภาพสูงสำหรับการแสดงผลข้อมูลฐานข้อมูลและการสร้างรายงาน อย่างไรก็ตาม คุณควรระวังขีดจำกัดความยาวของอักขระและผลกระทบต่อประสิทธิภาพที่อาจเกิดขึ้น และควรกำหนดค่าที่เหมาะสมเมื่อจำเป็น โดยการผสานกับฟังก์ชันรวมอื่น ๆ คุณสามารถทำการจัดการข้อมูลได้อย่างทรงพลังยิ่งขึ้น.


