Hàm kết hợp và gom nhóm
Cú pháp của hàm COUNT : SELECT COUNT(tên_cột) FROM tên_bảng Hàm COUNT (*): Hàm COUNT(*) trả về số lượng các dòng được chọn ở trong bảng. ...
Cú pháp của hàm COUNT :
SELECT COUNT(tên_cột) FROM tên_bảng
Hàm COUNT (*):
Hàm COUNT(*) trả về số lượng các dòng được chọn ở trong bảng.
Ví dụ ta có bảng Persons như sau:
Câu lệnh sau sẽ trả về số lượng các dòng trong bảng:
SELECT COUNT(*) FROM Persons
và kết quả trả về sẽ là: 3
Câu lệnh sau sẽ trả về số lượng những người lớn hơn 20 tuổi:
SELECT COUNT(*) FROM Persons WHERE Age > 20
kết quả trả về sẽ là: 2
Hàm COUNT (column):
Hàm COUNT(column) sẽ trả về số lượng các dòng có giá trị khác NULL ở cột được chỉ định.
Ví dụ ta có bảng Persons như sau:
Câu lệnh sau sẽ trả về số lượng những người mà cột Age trong bảng không rỗng:
SELECT COUNT(Age) FROM Persons
và kết quả trả về sẽ là: 2
Mệnh đề COUNT DISTINCT
Lưu ý: Các ví dụ dưới đây chỉ hoạt động với CSDL Oracle và MS SQL Server, không hoạt động trên MS Access (chưa thử nhiệm với các hệ CSDL khác!)
Từ khoá DISTINCT và COUNT có thể được dùng chung với nhau để đếm số lượng các kết quả không trùng nhau.
Cú pháp như sau:
SELECT COUNT(DISTINCT column(s)) FROM table
Ví dụ ta có bảng Orders như sau:
Câu lệnh SQL sau:
SELECT COUNT(DISTINCT Company) FROM Orders
sẽ trả về kết quả là: 3
SQL có sẵn khá nhiều hàm để thực hiện đếm và tính toán.
Cú pháp:
Cú pháp để gọi hàm trong câu lệnh SQL như sau:
SELECT function(tên_cột) FROM tên_bảng
Bảng dữ liệu chúng ta sẽ dùng trong các ví sụ tiếp theo:
Hàm AVG (column)
Hàm AVG trả về giá trị trung bình tính theo cột được chỉ định của các dòng được chọn. Các giá trị NULL sẽ không được xét đến khi tính giá trị trung bình.
Ví dụ:
Câu lệnh sau sẽ tính số tuổi trung bình của những người có tuổi trên 20:
SELECT AVG(Age) FROM Persons WHERE Age > 20
kết quả trả về sẽ là: 39.5
Hàm MAX (column)
Hàm MAX trả về giá trị lớn nhất trong cột. Các giá trị NULL sẽ không được xét đến.
Ví dụ:
SELECT MAX(Age) FROM Persons
kết quả trả về: 45
Hàm MIN (column)
Hàm MAX trả về giá trị nhỏ nhất trong cột. Các giá trị NULL sẽ không được xét đến.
Ví dụ:
SELECT MIN(Age) FROM Persons
kết quả trả về: 19
Lưu ý: Hàm MIN và MAX cũng có thể áp dụng cho các cột có dữ liệu là chuỗi văn bản. Dữ liệu trong cột sẽ được so sánh theo thứ tự tăng dần của từ điển
Hàm SUM (column)
Hàm SUM trả về tổng giá trị của cột. Các giá trị NULL sẽ không được xét đến.
Ví dụ:
Tìm tổng số tuổi của tất cả những người có trong bảng:
SELECT SUM(Age) FROM Persons
kết quả trả về: 98
Ví dụ:
Tìm tổng số tuổi của tất cả những người có tuổi lớn hơn 20:
SELECT SUM(Age) FROM Persons WHERE Age > 20
kết quả trả về: 79
Cú pháp
Các hàm tập hợp (ví dụ như SUM) thông thường cần thêm chức năng của mệnh đề GROUP BY.
GROUP BY ...
Mệnh đề GROUP BY...được thêm vào SQL bởi vì các hàm tập hợp (như SUM) trả về một tập hợp của các giá trị trong cột mỗi khi chúng được gọi, và nếu không có GROUP BY ta không thể nào tính được tổng của các giá trị theo từng nhóm riêng lẻ trong cột.
Cú pháp của GROUP BY như sau:
SELECT tên_cột, SUM(tên_cột) FROM tên_bảng GROUP BY tên_cột
Ví dụ sử dụng GROUP BY :
Giả sử ta có bảng Sales như sau:
Câu lệnh SQL sau:
SELECT Company, SUM(Amount) FROM Sales
sẽ trả về kết quả:
Kết quả trả về ở trên đôi khi không phải là cái mà ta mong đợi. Ta thêm mệnh đề GROUP BY vào trong câu lệnh SQL:
SELECT Company, SUM(Amount) FROM SalesGROUP BY Company
và kết quả trả về lần này sẽ là:
Kết quả này đúng là cái mà ta mong muốn.
Điều kiện trên nhóm
HAVING ...
Mệnh đề HAVING...được thêm vào SQL vì mệnh đề WHERE không áp dụng được đối với các hàm tập hợp (như SUM). Nếu không có HAVING, ta không thể nào kiểm tra được điều kiện với các hàm tập hợp.
Cú pháp của HAVING như sau:
SELECT tên_cột, SUM(tên_cột) FROM tên_bảngGROUP BY tên_cộtHAVING SUM(tên_cột) điều_kiện giá_trị
Ta sử dụng lại bảng Sales ở trên. Câu lệnh SQL sau:
SELECT Company, SUM(Amount) FROM SalesGROUP BY CompanyHAVING SUM(Amount) > 10000
sẽ trả về kết quả:
Với SQL, bí danh có thể được sử dụng cho tên của cột và tên của bảng.
Bí danh cột:
Cú pháp bí danh cột như sau:
SELECT tên_cột AS bí_danh_cột FROM tên_bảng
Bí danh bảng:
Bí danh bảng có cú pháp như sau:
SELECT tên_cột FROM tên_bảng AS bí_danh_bảng
Ví dụ sử dụng bí danh cột:
Ta có bảng Persons như sau:
Câu lệnh SQL sau:
SELECT LastName AS Họ, FirstName AS TênFROM Persons
Sẽ trả về kết quả:
- Mệnh đề GROUP BY
- Các thuộc tính trong mệnh đề SELECT (trừ những thuộc tính trong các hàm kết hợp) phải xuất hiện trong mệnh đề GROUP BY
- Mệnh đề HAVING
- Sử dụng các hàm kết hợp trong mệnh đề SELECT để kiểm tra một số điều kiện nào đó
- Chỉ kiểm tra điều kiện trên nhóm, không là điều kiện lọc trên từng bộ
- Sau khi gom nhóm điều kiện trên nhóm mới được thực hiện
- Thứ tự thực hiện câu truy vấn có mệnh đề GROUP BY và HAVING
(1) Chọn ra những dòng thỏa điều kiện trong mệnh đề WHERE
(2) Những dòng này sẽ được gom thành nhiều nhóm tương ứng với mệnh đề GROUP BY
(3) Áp dụng các hàm kết hợp cho mỗi nhóm
(4) Bỏ qua những nhóm không thỏa điều kiện trong mệnh đề HAVING
(5) Rút trích các giá trị của các cột và hàm kết hợp trong mệnh đề SELECT
Sử dụng cơ sở dữ liệu quản lý vật tư, viết các câu lệnh truy vấn thực hiện các yêu cầu sau:
1. Hiển thị tên vật tư và tổng số lượng vật tư đã xuất trong năm 2007
2. Hiển thị mã vật tư, tên vật tư và tổng số tiền ứng với vật tư đó đã xuất trong năm 2006
3. Hiển thị tên vật tư có đơn giá là 50000 hoặc 60000
4. Hiển thị tên vật tư và tổng số lượng đã xuất theo từng năm
5. Hiển thị tên vật tư và tổng số lượng đã xuất theo từng quý trong năm 2007