Xin chào các bạn, dù đây là lần đầu hay lần thứ n bạn xem bài viết tại vndataproduct.org. Thì mình cũng xin cám ơn các bạn đã tin tưởng và dành thời gian đọc những bài viết này, thông qua đó mình hy vọng các bạn có thể thu nhận một vài kiến thức hữu dụng.
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 xâu chuỗi về việc ứng dụng SQL trong Data Analysis.
Chuẩn bị
Data Analysis với SQL – Phần 1: Mở đầu
Ở bài này, chúng ta sẽ khởi tạo cơ sở dữ liệu PostgreSQL, và sử dụng bộ dataset để chuẩn bị cho việc học và thực hành.
Cơ bản
SQL trong Data Analysis: Nhập môn SQL cơ bản
Nhập môn cơ bản SQL cho dân data. Dường như mỗi ngày, các vị trí làm data phải dùng phần lớn thời gian vào việc sử dụng SQL để truy vấn, tìm hiểu và chỉnh sửa dữ liệu. Bài viết này sẽ là một bài viết không thể thiếu với các bạn.
Các kiểu dữ liệu cơ bản trong PostgreSQL
Sau khi chúng ta làm quen với một số câu lệnh đơn giản trong SQL. Tiếp theo, chúng ta sẽ cần học qua các kiểu dữ liệu cơ bản trong PostgreSQL.
Các hàm tổng hợp dữ liệu (Aggregation Function)
Ở bài này chúng ta sẽ làm quen các hàm tổng hợp dữ liệu. Ví dụ chúng ta cần tính tổng doanh thu theo tháng, hay giá trị trung bình đơn hàng. Đây cũng là một trong những thao tác thường ngày của một vị trí Data Analyst.
Cơ bản về Window Functions
Được xếp vào nhóm bài nâng cao. Các hàm trong Window Functions giúp chúng ta tính toán các chỉ số theo nhóm. Ví dụ chúng ta muốn tính chỉ số trung bình đơn hàng theo từng danh mục hàng hoá. Chúng ta có thể tính từng danh mục một, nhưng như vậy sẽ rất lâu. Vậy Window Functions sẽ giúp các bạn cho các vấn đề tương tự như thế này.
Window Functions nâng cao – Phần 01
Tiếp tục nhóm bài về Windows Functions, ở bài này chúng ta sẽ đi sâu về các hàm khác. Bao gồm:
ROW_NUMBER
RANK/DENSE_RANK/PERCENT_RANK
FIRST_VALUE và LAST_VALUE
LAG và LEAD
Sử dụng CTE (Common Table Expression)
Trong thực tế, chúng ta phải viết khá nhiều câu truy vấn lồng nhau chỉ để giải quyết một vấn đề. Một đoạn truy vấn lên tới 1000 dòng cũng không phải là không được. Tuy nhiên, sẽ có các truy vấn lặp lại, vì vậy với CTE sẽ giúp chúng ta tái sử dụng các truy vấn lặp lại đó một cách hiệu quả.
Nâng cao
Window Functions nâng cao – Phần 02
Bài viết kết thúc nhóm bài Window Functions. Chủ yếu ở bài này sẽ là phần cộng thêm nâng cao của Window Functions, trong thực tế cũng ít khi có trường hợp sử dụng. Tuy nhiên, bạn cũng nên học qua để trong một số trường hợp ít đó, thì vẫn có giải pháp.
Thực hành ứng dụng đệ quy (Recursive)
Trong thế giới của cơ sở dữ liệu quan hệ, các truy vấn đệ quy (recursive) đóng vai trò quan trọng trong việc giải quyết các vấn đề phức tạp, mà các câu truy vấn không thể giải quyết được. Ví dụ, chúng ta có dữ liệu phân cấp như nhân viên – trưởng nhóm – quản lý v.v. Việc truy vấn nhiều cấp đòi hỏi sẽ trở nên phức tạp khi có nhiều câu hỏi cho một câu truy vấn.
Một số hàm thường dùng trong Postgresql
Trong thực tế, bạn sẽ cần phải xử lý dữ liệu ở trong cách trường hợp sau: xử lý chuỗi, xử lý số thực, xử lý ngày & giờ, làm sạch dữ liệu v.v Thì mới bước được tới giai đoạn Data Analysis. Bài viết này sẽ giúp bạn làm quen các hàm thường dùng đó. Lưu ý: đây cũng là một chương trong chuỗi học Data Analysis, bạn nhớ học nhé.
Bài tập
Kiến thức phải đi đôi với thực hành. Dưới đây là phần bài tập, nó cũng sẽ gần gần giống với thực tế. Giả sử bạn là một Data Analyst, hệ thống bao gồm Postgresql làm DataWarehouse và file dữ liệu được export ra từ hệ thống bởi đội IT (xem bài chuẩn bị). Sếp của bạn giao cho bạn cần xuất file báo cáo như sau:
- Tính doanh thu, số lượng khách hàng, số lượng đơn hàng, số lượng sản phẩm được bán ra mỗi tuần, tháng, quý, năm.
- Tính giá trị trung bình đơn hàng (Avg. Order Value), lấy từ order_item.price. Tính trung bình số lượng sản phẩm giỏ hàng (Avg. Basket Size), lấy số lượng item thuộc về mỗi đơn hàng, và tính trung bình.
- Xếp hạng Avg.Order Value và Avg. Basket Size theo danh mục mỗi tháng, mỗi quý, mỗi năm. Tên danh mục phải lấy theo tên tiếng Anh (xem bảng product_category_name_translation).
- Tính SLA (Service Level Agreement), từ khi khách hàng đặt hàng tới khi nhận hàng ở mỗi công đoạn: nhận đơn -> duyệt đơn -> chờ giao -> giao thành công.
- Tính % đơn hoàn thành đơn trước cam kết: trong bảng order có cột estimated_delivery_date, đem đi so sánh với ngày được giao. Tính số lượng đơn hàng trượt thời gian cam kết. Nếu có số lượng đơn trượt cam kết, hãy tính toán công đoạn nào ảnh hưởng tới thời gian cam kết nhất.
- Xếp hàng sellers (nhà cung cấp) theo % đơn hàng, và % doanh thu. Sắp xếp các sellers có tỉ lệ tăng trưởng về % đơn hàng và % doanh thu theo quý và theo năm. Nếu có các sellers có tỉ lệ tăng trưởng giảm về % đơn hàng và % doanh thu, hãy chỉ ra.
Tổng kết
Sau chuỗi bài này, mình hy vọng các bạn có thể nắm vững những khái niệm và kỹ năng cần thiết để thao tác và truy vấn dữ liệu hiệu quả với SQL. Nó đồng thời còn là 1 trong các công cụ quan trọng nhất cho một Data Analyst, ngang với Excels và trên cả Python.
Và nó cũng là hành trang đầu tiên trong sự nghiệp Data. Ở các chuỗi bài tiếp theo chúng ta sẽ đi sâu vào nền tảng khoa học dữ liệu, thông qua việc chúng ta đã nắm sơ bộ về SQL sẽ giúp các bạn tiếp thu nhanh hơn kiến thức cho chuỗi bài đó.
Xin cám ơn cũng như chúc mừng các bạn đã dành thời gian để đọc, học và thực nghiệm các kiến thức SQL ở trên. Hy vọng chúng ta sẽ tiếp tục đồng hành với các chuỗi bài tiếp theo.