Page 1 of 1

LISTAGG trong Oracle vs GROUP_CONCAT trong mySql

Posted: Wed Feb 26, 2020 3:45 pm
by stararound
Đã bao giờ bạn cần phải tổng hợp data từ nhiều records thành một record đơn và kết hợp mỗi record đó với nhau bằng dấu phẩy "," hay "-", hoặc những ký tự đặc biệt khác chưa?

Bài toán tham khảo từ oracletutorial: https://www.oracletutorial.com/oracle-a ... e-listagg/

Image

Mong muốn được kết quả:

Image

Trong Oracle việc sử dụng LISTAGG khá đơn giản để làm việc đó:

Cú pháp:

Code: Select all

LISTAGG (
    [ALL] column_name [,
    delimiter]
) WITHIN GROUP(
    ORDER BY
        sort_expressions
);
Câu lệnh cụ thể:

Code: Select all

SELECT
    job_title,
    LISTAGG(first_name, ',') WITHIN GROUP(
    ORDER BY
        first_name
    ) AS employees
FROM
    employees
GROUP BY
    job_title
ORDER BY
    job_title;
May thay, trong mySQL cũng có một hàm có thể làm được tương tự, đó là hàm GROUP_CONCAT.
Link tham khảo ở đây: https://dev.mysql.com/doc/refman/5.6/en ... oup-concat

Cú pháp:

Code: Select all

GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])
Câu lệnh cụ thể:

Code: Select all

SELECT 
       job_title,
       GROUP_CONCAT(first_name SEPARATOR ",")
FROM employees
GROUP BY job_title;
Lưu ý thêm: LISTAGG chỉ hỗ trợ DB2 và Oracle. Không hỗ trợ mariaDB, mySQL, postgreSQL, SQLite