SQL trong Data Analysis: Các từ khóa thao tác dữ liệu bạn cần biết

Nội dung

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é.

thao tác dữ liệu - Example

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).

SQL
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

thao tác dữ liệu - Group by

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.

SQL
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ự:

SQL
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 đó.

SQL
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ề

thao tác dữ liệu - Order by

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_typeorder_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.

SQL
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.

SQL
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ả

thao tác dữ liệu - Count

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.

thao tác dữ liệu - Count 2

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.

Data manipulation - AVG MAX MIN SUM

Chúng ta sẽ chạy query

SQL
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.

SQL
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.

Bài viết liên quan

SQL trong Data Analysis: Procedure và Function – 2 công cụ không thể thiếu

Xin chào các bạn đã quay trở lại chuỗi bài SQL trong Data Analysis...

Tự học Data Analyst: Tổng hợp chuỗi bài SQL 101 trong Data Analysis

Trong bài viết này, chúng ta sẽ tổng hợp các bài viết thành một...

SQL trong Data Analysis: Hiểu rõ và ứng dụng đệ quy (Recursive trong PostgreSQL)

Trong thế giới của cơ sở dữ liệu quan hệ, các truy vấn đệ...

[Phân Tích Dữ Liệu Với Python] Tập 1: Làm Quen Với Pandas

Trong thời đại tiến bộ của khoa học dữ liệu, khả năng phân tích...
spot_img