VieTopikKhoá học
  • Games
  • Cá nhân
Tải app
© 2026 VieTopikChính sách bảo mậtĐiều khoản sử dụngCài appEnglish
  • Trang chủ
  • Học
  • Luyện thi
  • Cẩm nang
  • Games
  • Cá nhân
SQL với OracleTổng hợp
Bài 5/16
5 phút

Hàm tổng hợp

Bình luận
Nội dung bài · 5 mục
  1. 1.Khái niệm
  2. 2.Ví dụ
  3. 3.Thử ngay
  4. 4.Lỗi hay gặp
  5. 5.Tóm tắt

Chủ cửa hàng không cần xem từng dòng. Họ muốn biết có bao nhiêu sản phẩm, tổng tồn kho là bao nhiêu, món rẻ nhất giá bao nhiêu. Để trả lời, cần gom cả bảng thành một con số, và hàm tổng hợp làm việc đó.

Khái niệm

🧮 Hàm tổng hợp (aggregate function): hàm nhận nhiều dòng và trả về một giá trị duy nhất, như đếm, cộng, tìm lớn nhất.

Hàm Trả về
COUNT(*) số dòng
COUNT(cột) số dòng mà cột đó không NULL
SUM(cột) tổng
AVG(cột) trung bình
MIN(cột), MAX(cột) nhỏ nhất, lớn nhất

Mọi hàm trong bảng, trừ COUNT(*), đều bỏ qua giá trị NULL. Chúng tương ứng với Count, Sum, Average, Min, Max của LINQ.

Ví dụ

SELECT COUNT(*)   AS product_count,
       SUM(stock) AS total_stock,
       MIN(price) AS min_price,
       MAX(price) AS max_price
FROM products;
  • Kết quả chỉ có một dòng: 5 sản phẩm, tổng tồn kho 181, rẻ nhất 5000, đắt nhất 450000.
  • AS product_count đặt tên cho cột kết quả.
  • Có thể kết hợp với WHERE: thêm WHERE stock > 0 thì chỉ tính các món còn hàng.

Thử ngay

SELECT COUNT(*)     AS total,
       COUNT(email) AS with_email
FROM customers;

Đoán trước khi chạy: có 4 khách hàng. Hai cột này có bằng nhau không?

Xem kết quả
TOTAL WITH_EMAIL
4 3

Không bằng. COUNT(*) đếm mọi dòng, còn COUNT(email) bỏ qua dòng có email NULL, tức là bỏ qua Chi.

Lỗi hay gặp

Lấy cột thường cùng với hàm tổng hợp. Hàm tổng hợp gom cả bảng thành một dòng, nên Oracle không biết phải hiện name của dòng nào và báo lỗi ORA-00937: not a single-group group function.

-- SAI — lỗi: name không được gom lại
SELECT name, COUNT(*) FROM products;
-- ĐÚNG — chỉ lấy giá trị đã tổng hợp
SELECT COUNT(*) FROM products;

Muốn đếm theo từng nhóm, ví dụ theo thành phố, thì dùng GROUP BY (học ở bài sau).

Tóm tắt

  • Hàm tổng hợp gom nhiều dòng thành một giá trị: COUNT, SUM, AVG, MIN, MAX.
  • COUNT(*) đếm mọi dòng, COUNT(cột) bỏ qua NULL.
  • Không lấy cột thường cùng hàm tổng hợp khi chưa có GROUP BY.
  • Kết hợp WHERE để chỉ tổng hợp các dòng cần.
NULL trong SQLGROUP BY và HAVING

Bình luận

Đang tải bình luận…

Nội dung bài

  1. 1.Khái niệm
  2. 2.Ví dụ
  3. 3.Thử ngay
  4. 4.Lỗi hay gặp
  5. 5.Tóm tắt