Hàm tổng hợp... Mấy cái này đúng là phù thủy trong thế giới phân tích dữ liệu luôn ấy! Chúng giúp biến hàng triệu dòng dữ liệu thành kết quả ngắn gọn, dễ hiểu. Nhờ chúng, tụi mình có thể đếm, tìm min/max, tính trung bình và làm đủ trò khác nữa. Giờ thì cùng nhau tìm hiểu từng cái một nha.
Hàm tổng hợp — là các hàm đặc biệt trong SQL, thực hiện thao tác trên nhóm dòng và trả về một kết quả duy nhất. Nếu so sánh vui thì giống như bạn gom hết thống kê về cà phê buổi sáng của mình, ví dụ: uống bao nhiêu cốc trong tuần, có cho đường không hay bao nhiêu ngày liên tục cho thêm kem.
Ví dụ các bài toán mà hàm tổng hợp giải quyết được:
- Đếm tổng số bản ghi trong bảng.
- Tìm giá trị nhỏ nhất hoặc lớn nhất trong một cột số.
- Tính tổng các giá trị trong một cột.
- Tính trung bình tất cả giá trị của một cột.
- Lấy ra các giá trị duy nhất.
Nó hoạt động "bên trong" như thế nào?
SQL thực hiện hàm tổng hợp sau khi lấy dữ liệu bằng SELECT. Ví dụ, khi bạn dùng SUM() hoặc AVG(), SQL sẽ gom dữ liệu lại rồi mới tính toán trên các dòng đã chọn.
Các hàm tổng hợp cơ bản trong PostgreSQL
Cùng thực hành và xem top 5 "anh hùng" của chúng ta nhé:
COUNT()— đếm số dòng.SUM()— tính tổng giá trị của một cột số.AVG()— tính giá trị trung bình.MIN()— tìm giá trị nhỏ nhất.MAX()— tìm giá trị lớn nhất.
Ví dụ sử dụng hàm tổng hợp
- Đếm dòng với
COUNT()
Hàm COUNT() cho phép đếm tổng số dòng trong bảng hoặc số giá trị không rỗng trong một cột cụ thể.
Ví dụ: giả sử tụi mình có bảng students, lưu thông tin về sinh viên:
| id | name | age | grade |
|---|---|---|---|
| 1 | Otto Art | 20 | 85 |
| 2 | Maria Chi | 22 | 90 |
| 3 | Alex Lin | 21 | 78 |
| 4 | Anna Song | 23 | NULL |
Cùng đếm tổng số sinh viên nhé:
SELECT
COUNT(*) AS tong_so_sinh_vien
FROM students;
Kết quả:
| tong_so_sinh_vien |
|---|
| 4 |
Giờ đếm số sinh viên có grade nhé:
SELECT
COUNT(grade) AS sinh_vien_co_diem
FROM students;
Kết quả:
| sinh_vien_co_diem |
|---|
| 3 |
Tại sao lại như vậy? Vì COUNT(column) sẽ bỏ qua giá trị NULL đó.
- Tính tổng với
SUM()
Hàm SUM() dùng để tính tổng tất cả giá trị trong một cột số.
Ví dụ: cùng xem tổng điểm mà sinh viên đạt được là bao nhiêu nhé.
SELECT
SUM(grade) AS tong_diem
FROM students;
Kết quả:
| tong_diem |
|---|
| 253 |
Lưu ý: Nếu trong cột có NULL, chúng sẽ bị bỏ qua khi tính tổng.
- Giá trị trung bình với
AVG()
Hàm AVG() tính giá trị trung bình của tất cả bản ghi số trong cột.
Ví dụ: tính điểm trung bình của sinh viên nhé.
SELECT
AVG(grade) AS diem_trung_binh
FROM students;
Kết quả:
| diem_trung_binh |
|---|
| 84.33 |
Bạn có thể thấy NULL lại bị bỏ qua tiếp.
- Min và max với
MIN()vàMAX()
Đôi khi cần tìm giá trị nhỏ nhất hoặc lớn nhất. Đó là lúc dùng MIN() và MAX().
Ví dụ: Tìm sinh viên trẻ nhất và già nhất nhé.
SELECT
MIN(age) AS sinh_vien_tre_nhat,
MAX(age) AS sinh_vien_gia_nhat
FROM students;
Kết quả:
| sinh_vien_tre_nhat | sinh_vien_gia_nhat |
|---|---|
| 20 | 23 |
Chi tiết về mấy hàm này tụi mình sẽ nói kỹ hơn ở các bài sau nha.
Làm quen với NULL
Sắp tới sẽ có bài riêng về NULL, nhưng nói ngắn gọn thì NULL là không có giá trị. Không gì cả. Trống rỗng. Không có gì luôn!
Giả sử tụi mình có bảng students, lưu thông tin về sinh viên:
| id | name | age | grade | hobbie |
|---|---|---|---|---|
| 1 | Otto Art | 20 | 85 | |
| 2 | Maria Chi | 22 | 90 | Nhảy múa |
| 3 | Alex Lin | 21 | 78 | |
| 4 | Anna Song | 23 |
Tên và tuổi thì lúc nào cũng có, còn điểm và sở thích thì có thể không. Nếu trong ô bảng không có giá trị nào, thì người ta nói ô đó chứa NULL. NULL không phải là số cũng không phải là chuỗi, nó là ký hiệu đặc biệt, dùng để chỉ sự không có giá trị nào cả.
GO TO FULL VERSION