Mệnh đề GROUP BY trong MySQL – Hướng dẫn và ví dụ sử dụng. Trong bài viết này chúng ta sẽ tìm hiểu một mệnh đề rất quan trọng và được sử dụng nhiều trong MySQL, đó là mệnh đề GROUP BY. Cùng bắt đầu nhé!
Mệnh đề GROUP BY
Mệnh đề GROUP BY trong MySQL được sử dụng để nhóm các bản ghi trong một bảng theo các giá trị của một hoặc nhiều cột. Áp dụng Group by cho phép ta có thể tính toán tổng hợp, đếm, tính trung bình, tối đa hoặc tối thiểu của các giá trị trong các nhóm đó.
Hoặc trong một vài trường hợp ta có thể sử dụng lệnh Group by chỉ để loại bỏ và lấy một hàng duy nhất đối với các giá trị bị trùng lặp suất hiện hai hay nhiều lần.
Cú pháp
SELECT column_name1, aggregate_function(column_name2)
FROM table_name
WHERE condition
GROUP BY column_name3;
Trong đó:
- column_name1: Tên cột chọn(Có thể chọn tất cả các cột)
- aggregate_function(column_name2): Là một hàm đếm(count), tính trung bình(avg), tính tổng(SUM)…hay bất kì một hàm chức năng nào đó. column_name2 là tên cột được tính toán trong hàm. (Có thể có hoặc không).
- table_name: Là tên bảng
- condition: Điều kiện (Có thể có hoặc không)
- column_name3: Nhóm theo tên cột
column_name1, column_name2, column_name3 có thể cùng là một tên cột.
Ví dụ sử dụng
Mình có bảng tokens ví dụ như dưới đây.
Chúng ta sẽ cùng làm lần lượt các ví dụ minh họa để hiểu rõ hơn về mệnh đề g GROUP BY.
Ví dụ 1: Sử dụng GROUP BY loại bỏ các giá trị suất hiện nhiều lần
Với ví dụ này chúng ta sẽ nhóm các hàng có cùng user_id. Tức là với mỗi user_id ta sẽ loại bỏ các hàng trùng lặp và chỉ cần lấy ra một hàng duy nhất bất kì nào đó và không quan trọng là hàng nào. Vậy ta dùng mệnh đề GROUP BY để nhóm dữ liệu như sau.
SELECT * FROM `tokens`
GROUP BY user_id
Kết quả khi thực thi câu lệnh
Ví dụ 2: Sử dụng GROUP BY loại bỏ các user_id suất hiện nhiều lần, và đếm xem mỗi user_id suất hiện bao nhiêu lần.
Cũng tương tự như ví dụ 1, tuy nhiên đối với ví dụ này ta sẽ đếm xem user_id đó suất hiện bao nhiêu lần. Viết lệnh SQL như sau.
SELECT *, COUNT(user_id) as count
FROM `tokens`
GROUP BY user_id;
COUNT(user_id) as count, có nghĩa là ta định nghĩa lại cột được tạo thành COUNT(user_id) có tên là cột count.
Kết quả khi thực thi câu lệnh
Với ví dụ này dễ dàng nhận thấy các user_id chỉ suất hiện 1 lần là 19,970,456, user_id 67740 thì suất hiện là 3 lần, nhiều nhất là 4519 suất hiện 7 lần.
Ví dụ 3: Tính giá trị trung bình cộng trong 1 nhóm.
HEHE… với bảng ví dụ trên mình không biết phải tính giá trị cột nào cho hợp lý, nên mình tạm lấy cột id để tính trung bình nhé:)).
>>XEM THÊM: Khóa học lập trình Android từ cơ bản đến thành thạo – Giảm ngay 40%
Để tính trung bình cộng cột id của mỗi user_id ta viết lệnh SQL như sau:
SELECT *, AVG(id) as avg
FROM `tokens`
GROUP BY user_id
Kết quả thực hiện câu lệnh
Ví dụ 4: Tính tổng trong một nhóm
Cũng tương tự như ví dụ 3, ví dụ này mình sẽ tính tổng cột id của mỗi user_id. Viết SQL như sau.
SELECT *, SUM(id) as id_sum
FROM tokens
GROUP BY user_id
Kết quả thực hiện câu lệnh
Ví dụ 5: Tìm max id của mỗi user_id
SELECT user_id, MAX(id) as id_max
FROM `tokens`
GROUP BY user_id
Kết quả thực hiện câu lệnh
Ví dụ 6: Tìm min id của mỗi user_id
SELECT user_id, MIN(id) as id_max
FROM `tokens`
GROUP BY user_id
Kết quả thực hiện câu lệnh
Như ta đã biết để lọc dữ liệu ta sẽ sử dụng câu mệnh đề WHERE đặt điều kiện. Tuy nhiên đối với where chỉ có thể đặt điều kiện với các cột tồn tại trước trong bảng, còn đối với các cột được tạo trong quá trình select thì không thể đặt điều kiện với các cột này. Vì vậy mệnh đề HAVING đã ra đời để đắp ứng nhu cầu đó, tiếp tục theo dõi bài viết sau mình sẽ hướng dẫn chi tiết mệnh và cách sử dụng mệnh đề Having.
Cảm ơn bạn đã theo dõi bài viết! Chúc bạn học tốt!
[XEM CÁC BÀI VIẾT CHUYÊN ĐỀ HỌC MYSQL CƠ BẢN TẠI ĐÂY]
XEM THÊM Toán tử Like và Not Like – Tìm kiếm khớp chuỗi trong MySQL Tìm hiểu Mệnh đề WHERE IN, WHERE NOT IN trong MySQL Câu lệnh INSERT INTO trong MySQL – Lệnh chèn dữ liệu vào bảng Câu lệnh CREATE TABLE trong MySQL – Lệnh tạo bảng mới Các kiểu dữ liệu trong MySQL (Data Types) – Học MySQL Câu lệnh SELECT trong MySQL – Khi nào thì dùng lệnh SELECT Mệnh đề FROM trong MySQL – truy vấn từ bảng nào