01/10/2018, 17:29

COALESCE trả về biểu thức khác NULL đầu tiên trong SQL

SQL hỗ trợ chức năng COALESCE để trả về biểu thức có giá trị khác NULL đầu tiên trong số những biểu thức được truyền vào COALESCE. Cú pháp: COALESCE (expression [,…n]) Hay còn viết: COALESCE( expression 1, expression 2, expression 3, …, expression n) Trong đó: ...

SQL hỗ trợ chức năng COALESCE để trả về biểu thức có giá trị khác NULL  đầu tiên trong số những biểu thức được truyền vào COALESCE.

Cú pháp:

COALESCE (expression [,…n])

Hay còn viết:

COALESCE( expression 1, expression 2, expression 3, …, expression n)

Trong đó:

  • expression: là một biểu thức có kiểu bất kỳ
  • n: ý là có thể có nhiều expression, mỗi expression cách nhau bởi dấu phẩy (,) như cú pháp thứ 2 ở trên. Tất cả các biểu thức này bắt buộc phải cùng một dạng hoặc có thể qui đổi về cùng một dạng. Ví dụ, expression 1 là kiểu chuỗi thì, expression 2 đến expression n cũng phải là kiểu chuỗi, tương tự expression 1 là kiểu số thì expression 2 đến expression n cũng phải là kểu số, …

Giá trị COALESCE trả về chính là giá trị của biểu thức (expression) mà nó thỏa.

Ghi chú: nếu tất cả các expression là NULL thì COALESCE trả về NULL

Chức năng COALESCE (expression [,…n]) tương đương với chức năng CASE:

CASE
   WHEN (expression 1 IS NOT NULL) THEN expression 1
   …
   WHEN (expression n IS NOT NULL) THEN expression n
   ELSE NULL

Ví dụ minh họa:

Góc Kinh Nghiệm sẽ đưa ra một ví dụ minh họa cụ thể để làm sáng tỏ hơn chức năng COALESCE.

Góc Kinh Nghiệm có bảng dữ liệu Allowance chứa thông tin trợ cấp của nhân viên, bao gồm 4 loại trợ cấp sau: phone_allowance (trợ cấp điện thoại), house_allowance (trợ cấp nhà ở), responsibility_allowance (trợ cấp trách nhiệm), overtime_allowance (trợ cấp làm thêm hay còn gọi là trợ cấp tăng ca). Nhân viên chỉ được nhận 1 trong 4 loại trợ cấp nói trên.

Giả sử bảng dữ liệu Allowance có dữ liệu như sau:

Employee Scale phone_allowance house_allowance responsibility_allowance overtime_allowance
Đoàn Văn Đang 1.5 null 500,000 null null
Trần Xuân Vũ 2.6 368,000 null null null
Nguyễn Khánh Hưng 3.4 null null 679,000 null
Đoàn Thanh Thúy 2.9 null null null 464,000

Tiền trợ cấp nhân viên hưởng = hệ số công việc (Scale) * tiền trợ cấp

Góc Kinh Nghiệm sử dụng hàm COALESCE như sau:

SELECT COALESCE(phone_allowance, house_allowance, responsibility_allowance, overtime_allowance) * Scale As TotalAllwance

FROM Allowance

Kết quả Góc Kinh Nghiệm thu được sau khi chạy câu query:

Employee TotalAllwance
Đoàn Văn Đang 750.000
Trần Xuân Vũ 956.800
Nguyễn Khánh Hưng 2.308.600
Đoàn Thanh Thúy 1.345.600.0

Tương tự COALESCE bạn có thể sự dụng CASE

Góc Kinh Nghiệm chúc các bạn thành công!  :roll:


0