GROUP_CONCAT trong mệnh đề WHERE mysql

Hàm GROUP_CONCAT[] trong MySQL là một loại hàm tổng hợp. Hàm này được sử dụng để nối chuỗi từ nhiều hàng thành một chuỗi bằng nhiều mệnh đề khác nhau. Nếu nhóm chứa ít nhất một giá trị khác null, nó luôn trả về giá trị chuỗi. Nếu không, bạn sẽ nhận được một giá trị null

Sau đây là cú pháp của hàm GROUP_CONCAT[]

HOẶC,

Trong cú pháp này,

  • C1, c2,…. ,cN là các cột của bảng
  • c_name1 là cột trong bảng có các giá trị sẽ được nối thành một chuỗi cho mỗi nhóm
  • c_name2 là cột bảng mà từ đó nhóm được thực hiện

Các tùy chọn của hàm GROUP_CONCAT[] được giải thích bên dưới

Riêng biệt. Mệnh đề này loại bỏ các giá trị trùng lặp trong nhóm trước khi thực hiện nối

Đặt bởi. Nó cho phép chúng ta sắp xếp dữ liệu nhóm theo thứ tự tăng dần hoặc giảm dần rồi thực hiện nối. Theo mặc định, nó thực hiện sắp xếp theo thứ tự tăng dần. Tuy nhiên, bạn có thể sắp xếp các giá trị theo thứ tự giảm dần bằng cách sử dụng tùy chọn DESC một cách rõ ràng

dấu phân cách. Theo mặc định, mệnh đề này sử dụng toán tử dấu phẩy [,] làm dấu phân cách. Nếu bạn muốn thay đổi dấu phân cách mặc định, bạn có thể chỉ định giá trị bằng chữ

GHI CHÚ. Hàm này luôn trả về kết quả ở giá trị chuỗi nhị phân hoặc không nhị phân phụ thuộc vào các đối số đã chỉ định. Theo mặc định, nó trả về độ dài tối đa của giá trị chuỗi bằng 1024. Nếu muốn tăng độ dài này, bạn có thể sử dụng biến hệ thống group_concat_max_len

GROUP_CONCAT[] Ví dụ

Hãy để chúng tôi tạo một bảng employee để hiểu chức năng này hoạt động như thế nào trong MySQL bằng các truy vấn khác nhau

1. Sử dụng một truy vấn đơn giản

Tuyên bố này sẽ cung cấp cho đầu ra sau

2. Sử dụng Mệnh đề DISTINCT

Sau khi thực hiện thành công câu lệnh trên, chúng ta sẽ nhận được đầu ra sau

3. Sử dụng mệnh đề dấu phân cách

Ở đây, mệnh đề dấu phân cách thay đổi chuỗi trả về mặc định dấu phẩy [,] thành dấu chấm phẩy [;] và ký tự khoảng trắng

Câu lệnh trên sẽ cho đầu ra sau

GROUP_CONCAT[] và CONCAT_WS[]

Bây giờ, bạn đã biết hoạt động của hàm GROUP_CONCAT[]. Đôi khi, chúng ta có thể sử dụng hàm này với hàm CONCAT_WS[] để mang lại kết quả hữu ích hơn. Tuyên bố sau đây giải thích nó rõ ràng hơn

Trong câu lệnh này, hàm CONCAT_WS[] trước tiên ghép nối họ và tên của từng nhân viên và cho kết quả là tên đầy đủ của nhân viên. Tiếp theo, chúng tôi sử dụng hàm GROUP_CONCAT[] với mệnh đề phân cách dấu chấm phẩy [;] để tạo danh sách tất cả nhân viên trong một hàng. Cuối cùng, thực hiện tuyên bố. Sau khi thực hiện thành công ta sẽ được kết quả như sau

Hàm này trả về kết quả trong một hàng, không phải danh sách các giá trị. Do đó, chúng ta không thể làm việc với hàm GROUP_CONCAT[] với toán tử IN. Nếu chúng ta sử dụng toán tử IN với hàm này, thì truy vấn sẽ không hoạt động vì toán tử IN chấp nhận danh sách giá trị, không phải chuỗi

Lưu ý rằng điều này chỉ sắp xếp đầu ra của hàm

SELECT PetName 
FROM Pets;
9 – nó hoàn toàn độc lập với bất kỳ thứ tự nào được áp dụng cho chính câu lệnh
+---------+
| PetName |
+---------+
| Fluffy  |
| Fetch   |
| Scratch |
| Wag     |
| Tweet   |
| Fluffy  |
| Bark    |
| Meow    |
+---------+
8 rows in set [0.00 sec]
6

Mệnh đề
+---------+
| PetName |
+---------+
| Fluffy  |
| Fetch   |
| Scratch |
| Wag     |
| Tweet   |
| Fluffy  |
| Bark    |
| Meow    |
+---------+
8 rows in set [0.00 sec]
7

Chúng ta có thể sử dụng mệnh đề

+---------+
| PetName |
+---------+
| Fluffy  |
| Fetch   |
| Scratch |
| Wag     |
| Tweet   |
| Fluffy  |
| Bark    |
| Meow    |
+---------+
8 rows in set [0.00 sec]
7 để trả về các giá trị duy nhất. Nói cách khác, nếu có các giá trị trùng lặp, chỉ một lần xuất hiện được trả về

SELECT GROUP_CONCAT[DISTINCT PetName ORDER BY PetName ASC]
FROM Pets;

Kết quả

Bark,Fetch,Fluffy,Meow,Scratch,Tweet,Wag

Trong trường hợp này,

+---------+
| PetName |
+---------+
| Fluffy  |
| Fetch   |
| Scratch |
| Wag     |
| Tweet   |
| Fluffy  |
| Bark    |
| Meow    |
+---------+
8 rows in set [0.00 sec]
9 chỉ xuất hiện một lần. Khi chúng tôi chạy nó mà không có mệnh đề
+---------+
| PetName |
+---------+
| Fluffy  |
| Fetch   |
| Scratch |
| Wag     |
| Tweet   |
| Fluffy  |
| Bark    |
| Meow    |
+---------+
8 rows in set [0.00 sec]
7, thì
+---------+
| PetName |
+---------+
| Fluffy  |
| Fetch   |
| Scratch |
| Wag     |
| Tweet   |
| Fluffy  |
| Bark    |
| Meow    |
+---------+
8 rows in set [0.00 sec]
9 sẽ xuất hiện hai lần

Thay đổi Dấu phân cách

Theo mặc định, danh sách sử dụng dấu phẩy làm dấu phân cách. Nhưng chúng ta có thể thay đổi điều này nếu chúng ta muốn

SELECT GROUP_CONCAT[PetName SEPARATOR '-']
FROM Pets;

Kết quả

SELECT PetName 
FROM Pets;
0

Chúng tôi thậm chí có thể sử dụng một chuỗi trống để loại bỏ tất cả các dấu phân cách [để các giá trị được nối với nhau]

SELECT PetName 
FROM Pets;
1

Và ta được kết quả như sau

SELECT PetName 
FROM Pets;
2

Kết quả truy vấn được nhóm

Chúng tôi có thể bao gồm

SELECT PetName 
FROM Pets;
9 trong truy vấn có mệnh đề
+---------+
| PetName |
+---------+
| Fluffy  |
| Fetch   |
| Scratch |
| Wag     |
| Tweet   |
| Fluffy  |
| Bark    |
| Meow    |
+---------+
8 rows in set [0.00 sec]
43 để đạt được kết quả như thế này

SELECT PetName 
FROM Pets;
3

Kết quả

SELECT PetName 
FROM Pets;
4

Trong cơ sở dữ liệu của tôi, tên loại thú cưng thực tế nằm trong một bảng khác có tên là

+---------+
| PetName |
+---------+
| Fluffy  |
| Fetch   |
| Scratch |
| Wag     |
| Tweet   |
| Fluffy  |
| Bark    |
| Meow    |
+---------+
8 rows in set [0.00 sec]
44. Do đó, chúng tôi có thể chạy một
+---------+
| PetName |
+---------+
| Fluffy  |
| Fetch   |
| Scratch |
| Wag     |
| Tweet   |
| Fluffy  |
| Bark    |
| Meow    |
+---------+
8 rows in set [0.00 sec]
45 trên bảng
+---------+
| PetName |
+---------+
| Fluffy  |
| Fetch   |
| Scratch |
| Wag     |
| Tweet   |
| Fluffy  |
| Bark    |
| Meow    |
+---------+
8 rows in set [0.00 sec]
44 để lấy tên loại vật nuôi thực tế

SELECT PetName 
FROM Pets;
5

Kết quả

SELECT PetName 
FROM Pets;
6

Giới hạn độ dài

Đầu ra của

SELECT PetName 
FROM Pets;
9 bị cắt bớt theo độ dài tối đa được cung cấp bởi biến hệ thống
+---------+
| PetName |
+---------+
| Fluffy  |
| Fetch   |
| Scratch |
| Wag     |
| Tweet   |
| Fluffy  |
| Bark    |
| Meow    |
+---------+
8 rows in set [0.00 sec]
48, có giá trị mặc định là
+---------+
| PetName |
+---------+
| Fluffy  |
| Fetch   |
| Scratch |
| Wag     |
| Tweet   |
| Fluffy  |
| Bark    |
| Meow    |
+---------+
8 rows in set [0.00 sec]
49. Giá trị có thể được đặt cao hơn, mặc dù độ dài tối đa hiệu quả của giá trị trả về bị hạn chế bởi giá trị của
+---------+
| PetName |
+---------+
| Fluffy  |
| Fetch   |
| Scratch |
| Wag     |
| Tweet   |
| Fluffy  |
| Bark    |
| Meow    |
+---------+
8 rows in set [0.00 sec]
50

Làm cách nào để sử dụng Group_concat trong MySQL?

MySQL. Hàm Group_CONCAT[] . Đây là hàm tổng hợp [GROUP BY] trả về giá trị Chuỗi, nếu nhóm chứa ít nhất một giá trị không NULL. Nếu không, nó trả về NULL. used to concatenate data from multiple rows into one field. This is an aggregate [GROUP BY] function which returns a String value, if the group contains at least one non-NULL value. Otherwise, it returns NULL.

Làm cách nào để sắp xếp các giá trị Group_concat trong MySQL?

Vì hàm GROUP_CONCAT là một hàm tổng hợp nên để sắp xếp các giá trị, bạn phải sử dụng mệnh đề ORDER BY bên trong hàm , không phải trong . Mệnh đề SELECT trả về một giá trị chuỗi nên mệnh đề ORDER BY không có bất kỳ hiệu lực nào trong câu lệnh này.

Làm cách nào để đặt Group_concat_max_len trong MySQL?

Cú pháp thay đổi giá trị của group_concat_max_len trong thời gian chạy như sau, trong đó val là số nguyên không dấu. SET [TOÀN CẦU. PHIÊN] group_concat_max_len = val; Lưu ý. Độ dài kết quả tối đa được phép tính bằng byte cho hàm GROUP_CONCAT[]. Mặc định là 1024.

Concat nhóm là gì?

GROUP_CONCAT là hàm nối/hợp nhất dữ liệu từ nhiều hàng vào một trường . Đó là hàm GROUP BY trả về một chuỗi nếu nhóm chứa ít nhất 1 giá trị khác null, nếu không, nó trả về giá trị Null.

Chủ Đề