Giới thiệu
Tiếp nối chuỗi bài SQL trong data analysis: Từ khóa JOIN, ở bài này chúng ta sẽ đi sâu vào các từ khoá chuyên về thao tác dữ liệu (Data manipulation). Bao gồm: GROUP BY, ORDER BY, HAVING và các từ khoá liên quan tới nhóm dữ liệu (Aggregation Functions) như COUNT, AVG, MAX, MIN, SUM.
Lưu ý: nếu bạn không đi theo chuỗi bài mà muốn trực tiếp nhảy vào bài này thì có thể xem lại bài Data Analysis với SQL – Phần 1: Mở đầu để cài đặt cho mình các bộ dữ liệu phù hợp.
Lần này chúng ta sẽ sử dụng bảng “brazilian-ecommerce”.olist_order_payments_dataset để đi vào bài học nhé.
GROUP BY
Từ khoá GROUP BY sẽ nhóm các các cột dữ liệu được chọn (selected fields) vào thành nhóm. Từ khoá này thường được dùng để tạo ra một tập dữ liệu mới dựa trên tập dữ liệu hiện có (thường tập mới sẽ nhỏ hơn).
select order_id, payment_type from "brazilian-ecommerce".olist_order_payments_dataset
group by order_id , payment_type ;
Kết quả sẽ như bên dưới
Kết quả trả về sẽ hơi rối, vậy bạn có thể chọn chính xác theo order_id như câu query dưới đây để hiển thị rõ hơn từ kết quả BY. Số lượng dòng của order_id đó là 04, nhưng bằng group by chúng ta chỉ còn thấy 02.
select order_id, payment_type from "brazilian-ecommerce".olist_order_payments_dataset
where order_id = 'ae938042ee33a2f3048cb2e4d25f9bb8'
group by 1, 2 ;
Lưu ý: bạn cũng có thể điều chỉnh SQL trong Postgres như sau để dễ dàng đọc hơn, nhưng kết quả vẫn tương tự:
select order_id, payment_type from "brazilian-ecommerce".olist_order_payments_dataset
group by 1, 2 ;
ORDER BY
Từ khóa ORDER BY thường được dùng để sắp xếp dữ liệu trả về theo thứ tự của một cột dữ liệu nào đó.
select order_id, payment_type from "brazilian-ecommerce".olist_order_payments_dataset
group by 1, 2 order by payment_type ;
Kết quả trả về
Lưu ý: bạn có thể điều chỉnh từ khoá ASC bằng DESC để thay đổi chiều sắp xếp. Hoặc thay đổi payment_type thành order_id để chọn cột sắp xếp. Hoặc có thể chọn cả payment_type và order_id để sắp xếp lần lượt. Ví dụ như câu truy xuất dưới đây sẽ sắp xếp theo order_id rồi sau đó mới sắp xếp theo payment_type.
select order_id, payment_type from "brazilian-ecommerce".olist_order_payments_dataset
group by 1, 2 order by order_id, payment_type ;
Nhớ thử với order_id ae938042ee33a2f3048cb2e4d25f9bb8 để thấy sự khác biệt nhé.
COUNT
Từ khoá COUNT dùng để đếm số lượng dòng của câu lệnh truy xuất.
select order_id, payment_type, count(order_id) from "brazilian-ecommerce".olist_order_payments_dataset
group by 1, 2 order by 1,2;
Kết quả
Ngoài ra bạn cũng có thể dùng chung với từ khoá DISINCT với COUNT để đếm các giá trị trong cột được chọn thay vì đếm theo số lượng chúng xuất hiện. Kết quả lúc này sẽ khác với kết quả trên. Ví dụ như truy xuất dưới
Bạn sẽ thấy là các giá trị COUNT khác 1 ở kết quả trên đều thay bằng 1 hết.
AVG/MAX/MIN/SUM
Từ khoá AVG để tính trung bình (MEAN) các cột dữ liệu là kiểu số. Tương tự AVG, từ khoá MAX/MIN để tính giá trị lớn nhất và nhỏ nhất các cột dữ liệu là kiểu số. Và SUM để cộng các giá trị với các cột dữ liệu là kiểu số.
Chúng ta sẽ kiểm tra thử số liệu của ae938042ee33a2f3048cb2e4d25f9bb8.
Chúng ta sẽ chạy query
select avg(payment_value), max(payment_value), min(payment_value) , sum(payment_value)
from "brazilian-ecommerce".olist_order_payments_dataset where order_id = 'ae938042ee33a2f3048cb2e4d25f9bb8';
Kết quả sẽ trả về sẽ lần lượt là: 33.4149992466, 47.52999878, 5.46000004, 133.66000366.
HAVING
Từ khóa HAVING là một từ khoá được dùng để lọc (filter) các thao tác dữ liệu từ các từ khoá COUNT, AVG, MAX, MIN, SUM. Vì từ khoá WHERE chỉ có tác dụng lọc trên cột dữ liệu, chứ không lọc được trên các dữ liệu đã được tổng hợp (aggregated). Chúng ta sẽ thử nghiệm với câu truy vấn trên.
select avg(payment_value), max(payment_value), min(payment_value), sum(payment_value)
from "brazilian-ecommerce".olist_order_payments_dataset
where order_id = 'ae938042ee33a2f3048cb2e4d25f9bb8'
having avg(payment_value) > 34;
Không có kết quả được trả về (không có dòng dữ liệu) nào. Nếu bạn thay đổi điều kiện > 34 thành < 34, thì kết quả sẽ trả về tương tự như ở trên.
Tổng kết
Ở bài này này bạn đã học thêm được các từ khoá quan trọng để thao tác dữ liệu. Xin chú ý bài này tương đối quan trọng, trong thực tế các từ khoá trên được sử dụng như cơm bữa bởi các nhân sự trong ngành.
Xin cám ơn.