Trang chủ » Blog » [Thực hành] Câu lệnh GROUP BY- Codegym.vn

[Thực hành] Câu lệnh GROUP BY- Codegym.vn

bởi CodeGym | 26/12/2023 16:30 | Bài thực hành | Blog

Mục đích

Luyện tập sử dụng câu lệnh GROUP BY.

Mô tả bài toán- Câu lệnh GROUP BY

Sử dụng csdl classicmodels để thực hiện các truy vấn với các hàm tập hợp kết hợp với mệnh đề group by, having.

Hướng dẫn nộp bài:

  • Up code lên github
  • Paste link github vào phần nộp bài

Hướng dẫn

Bước 1: Sử dụng mệnh đề group by

Quan sát bảng orders trong csdl classicmodels.

Câu lệnh GROUP BY

Để biết được có bao nhiêu trạng thái của đơn hàng. Thực hiện như thế nào?

Sử dụng câu lệnh select status from orders thì sẽ trả về toàn bộ số bản ghi trong bảng đơn hàng, kể cả những bản ghi có trạng thái trùng nhau, tức là kết quả trả về như hình dưới, chúng ta sẽ không thể thực hiện việc đếm hay tự lọc bằng mắt để lấy về các trạng thái của đơn hàng vì số lượng bản ghi trả về rất nhiều.

Để giải quyết vấn đề trên chúng ta sử dụng mệnh đề group by với cột status như sau:

select status from orders 
group by status

Kết quả trả về hiển thị các trạng thái khác nhau của đơn hàng.

Câu lệnh GROUP BY

Vậy nhận thấy mệnh đề group by là một phần không bắt buộc của câu lệnh select, được sử dụng để nhóm các tập các hàng có cùng một giá trị vào thành một nhóm, mỗi nhóm đó chỉ trả về một hàng.

Bước 2: Sử dụng các hàm tập hợp với mệnh đề group by

Các hàm tập hợp (SUM, MAX, MIN, COUNT, AVG) cho phép tính toán một tập các hàng và trả về một giá trị duy nhất. Mệnh đề group by thường được sử dụng với một hàm tập để thực hiện việc tính toán và trả về một giá trị cho mỗi nhóm.

Bài toán đặt ra như sau muốn biết có bao nhiêu đơn đặt hàng trong mỗi trạng thái, chúng ta có thể sử dụng hàm COUNT với mệnh đề GROUP BY như sau:

select status, COUNT(*) as 'So luong status'
from orders
group by status

Kết quả trả về:

Bước 3: Sử dụng group by với hàm tập hợp truy vấn trên hai bảng.

Quan sát bảng orders và orderdetails.

Hãy thực hiện tính tổng số tiền của các đơn hàng theo trạng thái đặt hàng. Ta sẽ sử dụng lệnh inner join để kết nối 2 bảng và sử dụng hàm sum để tính tổng số tiền, nhóm theo trường status. Lệnh truy vấn được như sau:

select status, sum(quantityOrdered * priceEach) as amount
from orders 
inner join orderdetails on orders.ordernumber = orderdetails.ordernumber
group by status

Kết quả trả về:

Bước 4: Một yêu cầu khác là tính tổng tiền của từng đơn hàng, thực hiện lệnh truy vấn sau:

select orderNumber, sum(quantityOrdered * priceEach) as total
from orderdetails
group by orderNumber;

Kết quả trả về:

Câu lệnh GROUP BY

Bước 5: GROUP BY với mệnh đề HAVING

Để lọc các nhóm được trả về bởi mệnh đề GROUP BY, chúng ta sử dụng mệnh đề HAVING. Truy vấn sau đây sử dụng mệnh đề HAVING để bao gồm tổng doanh thu của những năm lớn hơn năm 2003.

select year(orderDate) as year, sum(quantityOrdered * priceEach) as total
from orders 
inner join orderdetails on orders.orderNumber = orderdetails.orderNumber
where status = 'shipped'
group by year
having year > 2003

Vậy mệnh đề having thay cho where để hạn chế dữ liệu trả về trong tập kết quả. Mệnh đề where dùng với các cột của bảng, tuy nhiên không dùng được với các hàm tập hợp. Mệnh đề having dùng với các hàm tập hợp.

Lưu ý: thứ tự thực hiện các lệnh.

select columnname(s) from tablename 
where conditional
group by ... having ...

Qua bài học này bạn đã luyện tập:

  • Cách truy vấn dữ liệu với mệnh đề group by
  • Sử dụng các hàm tập hợp
  • Sử dụng mệnh đề having
  • So sánh giữa having và where

Trên đây CodeGym đã cùng với bạn luyện tập sử dụng câu lệnh GROUP BY. Hãy chụp ảnh màn hình và nộp bài thực hành của bạn trên CodeGymX để cùng nhau luyện tập nhé!

Download - Giáo trình thuật toán

11 + 13 =

Tags:

0 Lời bình

Gửi Lời bình

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

BÀI VIẾT LIÊN QUAN

BẠN MUỐN HỌC LẬP TRÌNH?

GỌI NGAY

098 953 44 58

Đăng ký tư vấn lộ trình học lập trình

Đăng ký tư vấn, định hướng lộ trình học và giải đáp các thắc mắc về ngành nghề – Miễn phí – Online.

9 + 12 =

TƯ VẤN VỀ LỘ TRÌNH HỌC NGHỀ LẬP TRÌNH TẠI CODEGYM
TƯ VẤN VỀ LỘ TRÌNH HỌC NGHỀ LẬP TRÌNH TẠI CODEGYM