gom nhóm
17.1 Thực hành hàm kết hợp và gom nhóm1
17.1.1 Nhắc lại lý thuyết
Hàm kết hợp
Hàm count(), min(), max(), sum(), avg()
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.
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.
Mệnh đề COUNT DISTINCT
Lưu ý: Các ví dụ dưới đây chỉ hoạt động với CSDLOraclevà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)) As ‘Ten_cot’ FROM table 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) As FROM tên_bảng
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.
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.
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.
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)
1This content is available online at <http://voer.edu.vn/content/m18679/1.2/>.
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. Gom nhóm
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 Đ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ị
17.1.2 Bài tập mẫu
1.Viết câu truy vấn SQL hiển thị tất cả các mặt hàng có số lượng nhập lớn nhất. Hướng dẫn
- Sử dụng hàm Max để tìm số lượng của một đầu sách được nhập. - Chỉ nhận về các bản ghi có số lượng nhập = số lượng max Bài làm
Select * from tblDauSach Where maDS IN ( select maDS from tblPhieuNhap
where soLuong = max(soLuong)); 2. Đếm số đầu sách có trong thư viện. Hướng dẫn
Vì mỗi đầu sách có một mã đầu sách, do đó để đếm số đầu sách có trong thư viện ta chỉ cần đếm số lượng bản ghi có trong bảng tblDauSach.
Bài làm
Select count(maDS) as [Số lượng đầu sách] From tblDauSach
3. Đếm số lượng đầu sách của tác giả ‘Quách Tuấn Ngọc’ có trong thư viện. Hướng dẫn
Vì mỗi đầu sách có một mã đầu sách, do đó để đếm số đầu sách có trong thư viện ta chỉ cần đếm số lượng bản ghi có trong bảng tblDauSach thỏa mãn điều kiện có maTG là mã của tác giả ‘Quách Tuấn Ngọc’.
Lời giải
Select count(maDS) as [Số lượng đầu sách] From tblDauSach
Where maTG in (select maTG from tblTacGia where tenTG = ‘Quách Tuấn Ngọc’) 3. Hiển thị số lượng sách của mỗi lĩnh vực có trong thư viện.
Hướng dẫn
Ta thực hiện gom nhóm số lượng đầu sách theo lĩnh vực. Bài làm
Select maLV, sum(soLuong) as [Số Lượng] From tblDauSach
Group by maLV; III. Bài tập thực hành
Viết các câu truy vấn SQL thực hiện các yêu cầu sau: 1. Hiển thị số lượng tác giả có sách trong thư viện.
2. Hiển thị số lượng sách của mỗi tác giả có trong thư viện
3. Hiển thị tác giả có nhiều đầu sách nhất thuộc lĩnh vực Công Nghệ Thông Tin. 4. Hiển thị số lượng trung bình của các đầu sách có trong thư viện.
5. Hiển thị đầu sách được mượn nhiều nhất trong năm 2008. 6. Hiển thị Số lượng sách được trả trong ngày ‘3/9/2008’ 7. Hiển thị số lượng độc giả hiện có của thư viện.
8. Hiển thị các nhà xuất bản có số lượng sách xuất bản lớn hơn số lượng sách của nhà xuất bản Kim Đồng.
9. Hiển thị tất cả các đầu sách có số lượng nhập về lớn hơn số lượng nhập về của mọi quyển sách của nhà xuất bản Giao thông Vận tải.
Gợi ý: Trong SQL ‘Lớn hơn mọi’ có thể được biểu diễn bởi>ALL
1. Hiển thị số lượng sách ‘Lập trình hướng đối tượng với C#’có trong thư viện. 11. Hiển thị số lượt người mượn sách vào năm 2007.
12. Hiển thị tất cả các sinh viên có mã số thẻ bắt đầu bằng xâu ‘101’ 13. Hiển thị tổng số tiền đã sử dụng để nhập sách mới trong năm 2007.
Chú ý: Sinh viên thành tất cả các bài tập thực hành, cuối buổi nộp lại bài làm cho giáo viên các bài tập 1, 3, 4, 5, 9, 12