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

MySQL Group_Concat () so với T-SQL String_Agg ()

Một trong những hàm T-SQL được giới thiệu trong SQL Server 2017 là STRING_AGG() hàm số. Về cơ bản, điều này tương đương với GROUP_CONCAT() của MySQL hàm - nó cho phép bạn trả về kết quả truy vấn dưới dạng danh sách được phân cách, thay vì theo hàng.

Nhưng có một vài khác biệt nhỏ giữa hai chức năng.

Bài viết này khám phá một số khác biệt cú pháp chính giữa các hàm này.

Cú pháp

Trước hết, đây là cú pháp chính thức cho từng hàm.

MySQL - GROUP_CONCAT ()

 GROUP_CONCAT ([DISTINCT] expr [, expr ...] [ĐẶT HÀNG CỦA {unsigned_integer | col_name | expr} [ASC | DESC] [, col_name ...]] [SEPARATOR str_val]) 

T-SQL - STRING_AGG ()

 STRING_AGG (biểu thức, dấu phân tách) []  ::=TRONG VÒNG NHÓM (ORDER BY  [ASC | DESC]) 

Sự khác biệt về cú pháp

Dưới đây là ba điểm khác biệt về cú pháp chính giữa GROUP_CONCAT() của MySQL và STRING_AGG() của T-SQL chức năng:

  • Dấu phân tách mặc định :Có lẽ sự khác biệt rõ ràng nhất là STRING_AGG() yêu cầu bạn chỉ định một dấu phân cách. Nếu bạn không cung cấp hai đối số (đối số thứ hai là dấu phân cách), bạn sẽ gặp lỗi. Với GROUP_CONCAT() của MySQL mặt khác, dấu phân tách là một đối số tùy chọn. Nếu bạn không cung cấp, nó sẽ sử dụng dấu phẩy theo mặc định.
  • Sắp xếp các kết quả :Trong khi cả các hàm của MySQL và T-SQL đều cho phép bạn thêm ORDER BY mệnh đề, cú pháp hơi khác một chút. T-SQL yêu cầu bạn sử dụng WITHIN GROUP khi sắp xếp bộ kết quả, trong khi MySQL không có yêu cầu này.
  • Kết quả riêng biệt :MySQL cho phép bạn sử dụng DISTINCT để chỉ trả về các giá trị duy nhất. T-SQL không cung cấp tùy chọn này.

Dưới đây là các ví dụ để chứng minh những khác biệt này.

Dấu phân tách mặc định

MySQL - GROUP_CONCAT ()

Chúng tôi không cần chỉ định dấu phân tách trong MySQL. Đây là một đối số tùy chọn. Giá trị mặc định là dấu phẩy.

 SELECT GROUP_CONCAT (Genre) AS ResultFROM Genres; 

Kết quả:

 + ---------------------------------------------- + | Kết quả | + ---------------------------------------------- + | Rock, Jazz, Country, Pop, Blues, Hip Hop, Rap, Punk | + -------------------------------- -------------- + 

T-SQL - STRING_AGG ()

T-SQL yêu cầu chúng tôi chỉ định dấu phân tách.

 SELECT STRING_AGG (Genre, ',') AS ResultFROM Genres; 

Kết quả:

 Kết quả -------------------------------------------- Rock, Jazz, Country, Pop, Blues, Hip Hop, Rap, Punk 

Nếu chúng tôi không chỉ định dấu phân tách, chúng tôi sẽ gặp lỗi:

 CHỌN STRING_AGG (Thể loại) Làm thể loại Kết quảFROM; 

Kết quả:

 Lỗi:Hàm STRING_AGG yêu cầu 2 đối số. 

Sắp xếp kết quả

MySQL - GROUP_CONCAT ()

Khi sắp xếp bộ kết quả trong MySQL, chỉ cần thêm ORDER BY mệnh đề dưới dạng một đối số, theo sau là cột để sắp xếp nó, theo sau là ASC hoặc DESC tùy thuộc vào việc bạn muốn nó theo thứ tự tăng dần hay giảm dần.

 USE Music; CHỌN ar.ArtistName AS 'Artist', GROUP_CONCAT (al.AlbumName ORDER BY al.AlbumName DESC) AS 'Album List'FROM Artists arINNER THAM GIA Album alON ar.ArtistId =al.ArtistIdGROUP BY ArtistName;  

Kết quả:

 + ------------------------ + --------------------- -------------------------------------------------- ----- + | Nghệ sĩ | Danh sách Album | + ------------------------ + --------------------- -------------------------------------------------- ----- + | AC / DC | Nguồn điện || Allan Holdsworth | Mười Sáu Người Đàn Ông Tain, Cả Một Đêm Sai Lầm || Bạn thân Rich | Mặt Xoạc Lớn || Devin Townsend | Ziltoid the Omniscient, Epicloud, Casualties of Cool || Iron Maiden | Một nơi nào đó trong thời gian, Powerslave, Piece of Mind, No Prayer cho người chết, kẻ giết người || Jim Reeves | Tiếng Hát Xuống Ngõ || Michael Học cách đá | Scandinavia, Vĩnh hằng, Đêm xanh || Kịch bản | Không Có Âm Thanh Không Có Im Lặng || Tom Jones | Khen ngợi và Đổ lỗi, Chiếc vali bị mất từ ​​lâu, Along Came Jones | + -------------------------- + ------------ -------------------------------------------------- -------------- + 

T-SQL - STRING_AGG ()

Khi sắp xếp các kết quả được nối với ORDER BY , SQL Server yêu cầu WITHIN GROUP mệnh đề được sử dụng.

 USE Music; CHỌN ar.ArtistName AS 'Artist', STRING_AGG (al.AlbumName, ',') TRONG NHÓM (ORDER BY al.AlbumName DESC) AS 'Album List'FROM Nghệ sĩ arINNER THAM GIA Album alON ar.ArtistId =al.ArtistIdGROUP THEO ArtistName; 

Kết quả:

 Danh sách album của nghệ sĩ -------------------------------------------------- -------------------------------------------------- --------- AC / DC Powerage Allan Holdsworth The 16 Men of Tain, All Night Sai Buddy Rich Big Swing Face Devin Townsend Ziltoid the Omniscient, Epicloud, Thương vong của Cool Iron Maiden ở đâu đó trong thời gian, Powerslave, Piece of Tâm trí, Không cầu nguyện cho người chết, Kẻ giết ngườiJim Reeves hát dưới ngõ Michael học cách rock Scandinavia, Sự vĩnh cửu, Đêm xanh The Script No Sound without Silenc e Tom Jones Khen ngợi và Đổ lỗi, Chiếc vali bị mất từ ​​lâu, Cùng đến với Jones 

Kết quả khác biệt

MySQL - GROUP_CONCAT ()

GROUP_CONCAT() của MySQL hỗ trợ DISTINCT , cho phép bạn loại bỏ các giá trị trùng lặp khỏi tập kết quả.

 USE Solutions; CHỌN GROUP_CONCAT (DISTINCT TaskName) FROM Tasks; 

Kết quả:

 + ---------------------------------------------- ---------- + | GROUP_CONCAT (DISTINCT TaskName) | + ------------------------------------------- ------------- + | Làm vườn, Cho mèo ăn, Sơn mái nhà, Thư giãn, Đưa chó đi dạo | + --------------------------------- ----------------------- + 

T-SQL - STRING_AGG ()

STRING_AGG() của T-SQL hàm không hỗ trợ DISTINCT mệnh đề.

 SỬ DỤNG Giải pháp; CHỌN STRING_AGG (DISTINCT Tên tác vụ, ',') TỪ Nhiệm vụ; 

Kết quả:

 Lỗi:Cú pháp gần ',' không chính xác. 

Như mong đợi, lỗi xảy ra nếu chúng tôi cố gắng sử dụng DISTINCT mệnh đề với STRING_AGG() .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các giải pháp chia tỷ lệ cho MySQL (Nhân rộng, Phân cụm)

  2. MySQL:Làm cách nào để tham gia cùng một bảng nhiều lần?

  3. MySQL:Làm thế nào để sao chép các hàng, nhưng thay đổi một vài trường?

  4. Chuyển đổi giản đồ MySQL sang Github Wiki?

  5. Tích hợp MySQL với Python trong Windows