Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Thực hiện đánh số thứ tự trong GROUP_CONCAT của MySQL

Chuẩn bị bảng và dữ liệu

mysql> CREATE TABLE DemoTable1627 (
    -> FirstName VARCHAR(20),
    -> LastName VARCHAR(20)
    -> );
Query OK, 0 rows affected (0.59 sec)
mysql> INSERT INTO DemoTable1627 VALUES('John','Smith');
mysql> INSERT INTO DemoTable1627 VALUES('John','Doe');
mysql> INSERT INTO DemoTable1627 VALUES('Adam','Smith');
mysql> INSERT INTO DemoTable1627 VALUES('Carol','Taylor');

Dữ liệu gốc

mysql> SELECT * FROM DemoTable1627;
+-----------+----------+
| FirstName | LastName |
+-----------+----------+
| John      | Smith    |
| John      | Doe      |
| Adam      | Smith    |
| Carol     | Taylor   |
+-----------+----------+

Truy vấn GROUP_CONCAT với đánh số theo nhóm

Sử dụng biến người dùng (@j, @p) để đếm thứ tự trong mỗi nhóm LastName:

mysql> SELECT
    -> LastName,
    -> GROUP_CONCAT(
    ->   CONCAT(@j := IF(@p = LastName, @j + 1, IF(@p := LastName, 1, 1)), '.', FirstName)
    ->   SEPARATOR ', '
    -> ) AS FirstName
    -> FROM DemoTable1627
    -> GROUP BY LastName;

Kết quả

+----------+----------------+
| LastName | FirstName      |
+----------+----------------+
| Doe      | 1.John         |
| Smith    | 1.John, 2.Adam |
| Taylor   | 1.Carol        |
+----------+----------+
3 rows in set (0.09 sec)

Lưu ý: Kỹ thuật này dùng biến session để mô phỏng ROW_NUMBER() trước khi MySQL 8.0 hỗ trợ window function.