MySQL Group Concat สำหรับสตริง

Mysql Group Concat Strings



ฟังก์ชัน GROUP _CONCAT คือฟังก์ชันการรวม GROUP BY ที่ให้คุณเชื่อมค่าคอลัมน์จากหลายแถวเป็นฟิลด์เดียว ส่งคืนสตริงหากกลุ่มชุดมีค่าคอลัมน์หนึ่งหรือไม่มีค่าว่าง และส่งกลับค่า NULL หากไม่พบ

บทช่วยสอนนี้จะสอนวิธีใช้ฟังก์ชัน MySQL GROUP_CONCAT() เพื่อรวมสตริงจากกลุ่มที่มีหลายตัวเลือก







การใช้งานพื้นฐาน

ดังที่เราได้กล่าวไปแล้ว ฟังก์ชันนี้จะส่งคืนผลลัพธ์สตริงด้วยค่าของค่าที่ไม่ใช่ค่าว่างที่ต่อกัน หรือ NULL หากไม่มีอยู่



ไวยากรณ์ทั่วไปคือ:



GROUP_CONCAT ([ แตกต่าง ]ด่วน[,ด่วน ...]
[ สั่งโดย ด่วน
[ ASC | รายละเอียด ] [,col_name ...]]
[SEPARATOR str_val])

คำอธิบาย

จากไวยากรณ์ข้างต้น คุณจะเห็นว่าฟังก์ชัน GROUP_CONCAT ใช้ส่วนคำสั่งและข้อจำกัดของ MySQL เพื่อระบุตัวเลือกต่างๆ:





  1. แตกต่าง: ส่วนคำสั่ง DISTINCT ช่วยลบค่าที่ซ้ำกันในกลุ่มชุดก่อนกระบวนการต่อกัน พิจารณาบทช่วยสอนของเราที่อธิบาย MySQL DISTINCT เพื่อทำความเข้าใจวิธีการทำงาน
  2. สั่งโดย: ส่วนคำสั่งถัดไปคือ ORDER BY ที่ช่วยจัดเรียงค่าในลำดับที่ระบุ ลำดับอาจขึ้นหรือลงก็ได้ หากไม่มีการระบุลำดับ MySQL จะจัดรูปแบบค่าตามลำดับจากน้อยไปมาก
  3. ตัวแยก : ประโยคนี้ตั้งค่าตัวอักษรสตริงที่แทรกระหว่างค่าของกลุ่มในกระบวนการต่อกัน ตามค่าเริ่มต้น MySQL จะใช้เครื่องหมายจุลภาค (,) เพื่อแยกค่า

บันทึก: ผลลัพธ์สตริงที่สร้างโดยฟังก์ชัน MySQL GROUP_CONCAT() ถูกจำกัดความยาวตามค่าที่กำหนดไว้ในตัวแปร group_concat_max_len ค่านี้กำหนดไว้ในระบบและมีค่าเริ่มต้นเป็น 1024 คุณสามารถเปลี่ยนค่านี้ได้ทั่วโลกหรือตั้งค่าในเซสชันที่คุณต้องการ

ชุด [ ทั่วโลก | การประชุม ]group_concat_max_len= ค่า ;

พิจารณาข้อมูลอ้างอิงด้านล่างเพื่อเรียนรู้เพิ่มเติม:



https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_group_concat_max_len

มันทำงานอย่างไร: ตัวอย่าง

ให้ฉันใช้ตัวอย่างง่ายๆ เพื่ออธิบายว่าฟังก์ชัน GROUP_CONCAT() ทำงานอย่างไร พิจารณาตารางที่มีฟิลด์สำหรับ CHAR เป็น:

สร้าง ตาราง concat ( ค่า ชาร์ );

ให้เราแทรกค่าลงในตารางตามที่แสดงในแบบสอบถามด้านล่าง:

แทรก เข้าไปข้างใน concat ( ค่า ) ค่านิยม ('ชม'),('และ'),('NS'),('NS'),('หรือ');

หากเราดำเนินการ GROUP_CONCAT พื้นฐานกับค่าในตาราง เราจะได้ผลลัพธ์สตริงดังที่แสดงด้านล่าง:

เลือก GROUP_CONCAT ( แตกต่าง ค่า สั่งโดย ค่า ASC ตัวแยก'') จาก concat ;

ค่าผลลัพธ์คือ:

+ -------------------------------------------------- -------------- +
| GROUP_CONCAT ( แตกต่าง ค่า สั่งโดย ค่า ASC ตัวแยก'') |
+ -------------------------------------------------- -------------- +
|E H L O|
+ -------------------------------------------------- -------------- +
1แถว ใน ชุด (0.01วินาที)

คุณต้องการวิธีอื่นในการทำความเข้าใจว่าเกิดอะไรขึ้นกับผลลัพธ์ที่ระบุข้างต้นหรือไม่?

เราเริ่มต้นด้วยการลบค่าที่ซ้ำกันทั้งหมดเนื่องจาก MySQL DISTINCT clause ที่ลบ L หนึ่งค่า

ต่อไป เราดำเนินการ ORDER BY จากน้อยไปมากตามที่กำหนดไว้ใน (ASC) ซึ่งจะเปลี่ยนสตริงในรูปแบบของ

สวัสดี->EHLO

สุดท้าย เราดำเนินการกระบวนการต่อกันโดยใช้ช่องว่างเป็นตัวคั่นสำหรับค่าที่ตั้งไว้ ส่งผลให้สตริง E H L O จาก {H, E, L, L O}

ตัวอย่างการใช้งานกรณี

ให้เรานำฐานข้อมูลจริงมาใช้เพื่อแสดงว่าเราสามารถใช้ฟังก์ชัน GROUP_CONCAT() ได้อย่างไร ในตัวอย่างนี้ เราจะใช้ฐานข้อมูล Sakila โดยเฉพาะตารางที่อยู่จากฐานข้อมูล Sakila

พิจารณาแหล่งข้อมูลด้านล่างเพื่อดาวน์โหลดฐานข้อมูลสำหรับตัวอย่างของคุณ:

https://dev.mysql.com/doc/index-other.html

ในตาราง address ของฐานข้อมูล Sakila จะได้คอลัมน์ District เราสามารถแยกเขตที่ไม่ซ้ำกันทั้งหมดด้วยท่อดังที่แสดงในแบบสอบถามด้านล่าง:

เลือก GROUP_CONCAT ( แตกต่าง อำเภอ สั่งโดย อำเภอ SEPARATOR'|') จาก sakila.ที่อยู่ LIMIT 5;

แบบสอบถามด้านบนจะแสดงเขต DISTINCT ทั้งหมดและเรียงลำดับจากน้อยไปหามากโดยคั่นด้วยไพพ์

บันทึก: ฟังก์ชัน GROUP_CONCAT() เป็นฟังก์ชันรวม ดังนั้นจึงจำเป็นต้องระบุคำสั่ง ORDER BY ในฟังก์ชัน ไม่ใช่ในคำสั่ง SELECT

บทสรุป

ฟังก์ชัน MySQL GROUP_CONCAT() ที่กล่าวถึงในบทช่วยสอนนี้เป็นฟังก์ชันที่มีประโยชน์ที่ช่วยให้คุณสร้างข้อมูลที่ไม่ซ้ำ จัดเรียง และจัดระเบียบจากตารางที่อาจมีข้อมูลที่ซ้ำกันและไม่เรียงลำดับ

พิจารณาเอกสารหรือบทช่วยสอน MySQL อื่นๆ ของเราเพื่อเรียนรู้เพิ่มเติม