CodeGym /Các khóa học /SQL SELF /Tính tổng dữ liệu với SUM() — cú pháp và ví dụ

Tính tổng dữ liệu với SUM() — cú pháp và ví dụ

SQL SELF
Mức độ, Bài học
Có sẵn

Hãy tưởng tượng nhé... Bạn có một danh sách mua sắm siêu dài ở siêu thị. Bạn muốn tính xem cuối cùng đã tiêu bao nhiêu tiền. Chứ ai lại ngồi cộng từng cái một đúng không? Nhưng với mấy bạn bán hàng thì mọi thứ đã nằm trong database rồi. Thế nên bạn nhận được hóa đơn với số tiền chuẩn luôn. Gần như chắc chắn, đâu đó trong app của họ có sự giúp sức của nhân vật chính hôm nay — hàm SUM()! Đây là một hàm tổng hợp cho phép cộng các giá trị trong một cột kiểu số.

Cú pháp SUM()

Hàm SUM() nhìn đơn giản đúng như tên gọi, nhưng cùng bóc tách từng phần nhé:

SELECT SUM(cột)
FROM bảng;

Hàm này lấy tất cả giá trị trong cột chỉ định và cộng lại. Nhưng nói thật nhé: không có chuyện cộng chuỗi text hay ngày tháng đâu! Chỉ số thôi nha.

Ví dụ sử dụng SUM()

Bắt đầu với ví dụ đơn giản. Ta sẽ làm việc với bảng salaries, nơi lưu lương của nhân viên:

employee_id salary
1 50000
2 60000
3 55000
4 75000

Ví dụ 1: Tính tổng tất cả lương

Bạn muốn biết tổng quỹ lương của công ty. Làm như này nè:

SELECT SUM(salary) AS total_salary
FROM salaries;

Kết quả:

total_salary
240000

Chuyện gì vừa xảy ra? PostgreSQL đã cộng tất cả giá trị trong cột salary (50000 + 60000 + 55000 + 75000) và trả về kết quả trong cột mới tên total_salary.

Ví dụ 2: Tính tổng có điều kiện

Giả sử bạn muốn biết tổng lương chỉ của những ai nhận trên 55,000. Nhớ lại operator WHERE quen thuộc nhé:

SELECT SUM(salary) AS high_salary_total
FROM salaries
WHERE salary > 55000;

Kết quả:

high_salary_total
135000

Ở đây có gì? Đầu tiên PostgreSQL lọc với WHERE salary > 55000, chỉ giữ lại dòng có lương 60000 và 75000. Sau đó cộng hai lương này (60000 + 75000).

3. Đặc điểm khi dùng SUM()

NULL ảnh hưởng gì đến SUM()? Như đã thấy, NULL là "không có gì", và SUM() sẽ bỏ qua nó khi tính toán. Xem bảng này nhé:

employee_id salary
1 50000
2 60000
3 NULL
4 75000

Nếu muốn biết tổng quỹ lương:

SELECT SUM(salary) AS total_salary
FROM salaries;

Kết quả:

total_salary
185000

Tại sao lại là "185000", không phải "NULL"? PostgreSQL đơn giản là bỏ qua NULL khi tính tổng.

Ví dụ truy vấn phức tạp với SUM()

Ví dụ 1: Tính tổng và lọc trong một truy vấn

Hãy tưởng tượng bảng sales lưu dữ liệu bán hàng. Đây là cấu trúc của nó:

product_id amount
1 150
2 200
3 NULL
1 100

Bạn muốn biết tổng số bán amount chỉ cho sản phẩm đầu tiên product_id = 1:

SELECT SUM(amount) AS total_sales
FROM sales
WHERE product_id = 1;

Kết quả:

total_sales
150

Ví dụ 2: Tổng và phép tính thêm

Lại quay về bảng salaries. Bạn muốn biết quỹ lương vượt quá 200,000 là bao nhiêu:

SELECT SUM(salary) - 200000 AS surplus
FROM salaries;

Kết quả:

surplus
40000

Lỗi phổ biến khi dùng SUM()

Dùng SUM() cho dữ liệu không phải số: nếu lỡ cộng nhầm kiểu text chẳng hạn, bạn sẽ bị lỗi ngay. Hãy cẩn thận và kiểm tra kiểu dữ liệu trong cột của bạn nhé.

Bỏ qua NULL: nhiều bạn mới hay quên mất NULL và nghĩ nó cũng được tính. Điều này có thể dẫn đến kết quả bất ngờ đó.

2
Nhiệm vụ
SQL SELF, mức độ, bài học
Đã khóa
Tính tổng tất cả các phần tử trong cột
Tính tổng tất cả các phần tử trong cột
2
Nhiệm vụ
SQL SELF, mức độ, bài học
Đã khóa
Tính tổng có điều kiện
Tính tổng có điều kiện
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION