Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách kết hợp nhiều dòng thành một cột trong MySQL

Đôi khi bạn có thể cần kết hợp nhiều hàng thành một cột. Dưới đây là cách nối nhiều hàng thành một cột trong MySQL bằng cách sử dụng hàm GROUP_CONCAT. Bạn cũng có thể sử dụng nó để nối các hàng thành chuỗi hoặc lấy dữ liệu nhiều hàng trong một hàng trong MySQL.

Cách ghép nhiều dòng thành một cột trong MySQL

Dưới đây là các bước để nối nhiều hàng thành một cột trong MySQL.

Giả sử bạn có bảng bán hàng sau (sales_rep, sale)

mysql> create table sales(sales_rep varchar(255),sale int);

mysql> insert into sales(sales_rep, sale) 
       values('Albert',10),('Bob',23),
             ('Chris',20),('Dave',35);

mysql> select * from sales;

+-----------+------+
| sales_rep | sale |
+-----------+------+
| Albert    |   10 |
| Bob       |   23 |
| Chris     |   20 |
| Dave      |   35 |
+-----------+------+

Phần thưởng đọc:Cách tính Tổng số đang chạy trong MySQL

Giả sử bạn muốn báo cáo tất cả các đại diện bán hàng có doanh số bán hàng> 10 bằng truy vấn sau.

mysql> select sales_rep from sales where sale>10;

Bạn sẽ nhận được kết quả sau

+-----------+
| sales_rep |
+-----------+
| Bob       |
| Chris     |
| Dave      |
+-----------+

Tuy nhiên, chúng tôi muốn tên sales_rep hiển thị trên một dòng.

Bob, Chris, Dave

Trong trường hợp này, chúng tôi sử dụng hàm GROUP_CONCAT để ghép nhiều hàng thành một cột.

mysql> select group_concat(sales_rep) from sales2 where sale>10;
+-------------------------+
| group_concat(sales_rep) |
+-------------------------+
| Bob,Chris,Dave          |
+-------------------------+

GROUP_CONCAT nối tất cả các giá trị không rỗng trong một nhóm và trả về chúng dưới dạng một chuỗi duy nhất.

Nếu bạn muốn tránh trùng lặp, bạn cũng có thể thêm DISTINCT trong truy vấn của mình. Giả sử bạn có bảng sau.

mysql> select * from sales3;
+---------+------------+------+
| product | order_date | sale |
+---------+------------+------+
| A       | 2020-01-01 |   20 |
| B       | 2020-01-02 |   25 |
| B       | 2020-01-03 |   15 |
| A       | 2020-01-04 |   30 |
| A       | 2020-01-05 |   20 |
+---------+------------+------+

Trong bảng trên, cột sản phẩm chứa các giá trị trùng lặp. Vì vậy, chúng tôi sử dụng từ khóa DISTINCT để chỉ chọn các giá trị duy nhất.

mysql> select group_concat(distinct product) from sales3 where sale>10;
+--------------------------------+
| group_concat(distinct product) |
+--------------------------------+
| A,B                            |
+--------------------------------+

Phần thưởng đọc:Cách thêm tổng số hàng trong MySQL

Bạn cũng có thể sử dụng hàm GROUP BY để nối các giá trị hàng cho mỗi nhóm. Đây là một ví dụ. Giả sử bạn có bảng sau.

mysql> create table sales_reps(product varchar(255),sales_rep varchar(255));

mysql> insert into sales_reps(product, sales_rep) 
       values('A','Albert'),('A','Bob'),('A','Chris'),
             ('B','Dave'),('B','Edgar'),('B','Finch');

mysql> select * from sales_reps;
+---------+-----------+
| product | sales_rep |
+---------+-----------+
| A       | Albert    |
| A       | Bob       |
| A       | Chris     |
| B       | Dave      |
| B       | Edgar     |
| B       | Finch     |
+---------+-----------+

Đây là một truy vấn trong đó chúng tôi nối các tên đại diện cho từng sản phẩm, sử dụng mệnh đề GROUP BY.

mysql> select product, group_concat(sales_rep) from sales_reps group by product;
+---------+-------------------------+
| product | group_concat(sales_rep) |
+---------+-------------------------+
| A       | Albert,Bob,Chris        |
| B       | Dave,Edgar,Finch        |
+---------+-------------------------+

Sau khi nối nhiều hàng thành một cột, bạn có thể sử dụng công cụ báo cáo để vẽ biểu đồ kết quả trong bảng và chia sẻ chúng với nhóm của mình. Đây là ví dụ về một bảng được tạo bằng Ubiq.

Nhân tiện, nếu bạn muốn tạo biểu đồ, trang tổng quan và báo cáo từ cơ sở dữ liệu MySQL, bạn có thể thử Ubiq. Chúng tôi cung cấp bản dùng thử miễn phí 14 ngày.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Neo4j - Xóa mối quan hệ bằng Cypher

  2. Tính toán phần trăm từ tần suất trong MySQL

  3. Làm cách nào để tạo cơ sở dữ liệu nhiều người thuê với cấu trúc bảng được chia sẻ?

  4. Độ dài tối đa của MySQL và GROUP_CONCAT ()

  5. Php - Cài đặt PHP của bạn dường như thiếu phần mở rộng MySQL mà WordPress yêu cầu