Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Bài 18 — Học SQL cho PM: roadmap 4 tuần

Đã đọc 0/19 mục · còn khoảng 13 phút
Cách chúng tôi ghi nhận

Một mục được tính là đã đọc khi nó nằm giữa màn hình đủ lâu so với độ dài của nó (bảng và sơ đồ tính một nửa), bạn vẫn đang cuộn hoặc bấm phím, và bạn đã thấy tới cuối mục. Lướt nhanh hoặc để tab mở không được tính. Chúng tôi chỉ lưu thời gian đọc từng mục — không lưu gì khác.

Mở đầu — vì sao bài này quan trọng

Hãy hình dung một buổi sáng thứ Hai điển hình trong đời một Product Manager. Sếp nhắn tin: "Tuần trước feature checkout mới launch, tỷ lệ bỏ giỏ hàng có giảm không em?". Nếu bạn là một PM không biết SQL, bạn sẽ làm gì? Bạn mở Slack, gõ tin nhắn cho data analyst, rồi chờ. Có thể nửa ngày, có thể đến chiều, có thể đến mai vì bạn ta đang bận chạy báo cáo cho team marketing. Trong khi đó, một PM biết SQL chỉ cần mở công cụ query, gõ vài dòng, và trả lời sếp trong vòng năm phút.

Đây không phải chuyện cường điệu. Trong các đội sản phẩm tại MoMo, Tiki, VNG hay Shopee, dữ liệu là ngôn ngữ chung của mọi quyết định. Và phần lớn câu hỏi sản phẩm hàng ngày — "Bao nhiêu user dùng tính năng này tuần qua?", "Nhóm khách hàng nào churn nhiều nhất?", "Funnel onboarding rơi rớt ở bước nào?" — có thể được trả lời bằng những câu SQL đơn giản mà bạn hoàn toàn học được trong bốn tuần.

Điều quan trọng cần hiểu ngay: bạn không cần trở thành data engineer. Bạn không cần biết tối ưu query phức tạp, không cần học database administration. Mục tiêu của một PM là đủ giỏi để tự trả lời 80% câu hỏi thường gặp mà không phải xếp hàng chờ data team. Phần 20% phức tạp còn lại — phân tích cohort sâu, mô hình dự báo — cứ để chuyên gia lo. Bài này sẽ cho bạn một lộ trình bốn tuần thực tế, vừa sức người đi làm, để đạt được năng lực "PM tự chủ về dữ liệu".

Khái niệm cốt lõi

SQL thực chất là gì đối với một PM?

SQL (Structured Query Language) là ngôn ngữ để "hỏi" cơ sở dữ liệu. Dữ liệu sản phẩm của bạn — mỗi lần user đăng ký, mỗi giao dịch, mỗi cú click — được lưu trong các bảng (table), giống như những sheet Excel khổng lồ với hàng triệu dòng. Mỗi bảng có các cột (column): ví dụ bảng users có cột user_id, created_at, city; bảng orders có order_id, user_id, amount, status, created_at.

Công việc của bạn với tư cách PM là đặt câu hỏi đúng và dịch nó thành cú pháp SQL. Tin tốt là cú pháp này gần với tiếng Anh tự nhiên đến mức ngạc nhiên: "lấy (SELECT) cột này từ (FROM) bảng kia, lọc theo (WHERE) điều kiện nọ".

Bộ khung 6 mệnh đề bạn phải nắm

Hơn 80% query của PM xoay quanh sáu từ khóa sau, và thứ tự viết chúng gần như luôn cố định:

  • SELECT — chọn cột muốn xem.
  • FROM — chỉ định bảng lấy dữ liệu.
  • WHERE — lọc điều kiện (ví dụ chỉ lấy đơn hàng tháng 6).
  • GROUP BY — gom nhóm để tính tổng/đếm theo từng nhóm (ví dụ doanh thu theo từng thành phố).
  • ORDER BY — sắp xếp kết quả (cao xuống thấp, mới đến cũ).
  • LIMIT — giới hạn số dòng trả về (lấy top 10).
Ví dụ một câu hoàn chỉnh trả lời "Top 5 thành phố có nhiều đơn hàng nhất trong tháng 6":

SELECT city, COUNT(*) AS so_don
FROM orders
WHERE created_at >= '2026-06-01'
GROUP BY city
ORDER BY so_don DESC
LIMIT 5;

Các hàm tổng hợp (aggregate functions)

Đây là "vũ khí" của PM vì sản phẩm luôn cần con số tổng quát: COUNT() đếm số dòng, SUM() cộng tổng, AVG() tính trung bình, MIN()/MAX() lấy giá trị nhỏ/lớn nhất. Khi kết hợp với GROUP BY, bạn trả lời được hầu hết câu hỏi định lượng.

JOIN — nối hai bảng

Dữ liệu thật không nằm gọn trong một bảng. Để biết "khách hàng ở Hà Nội chi tiêu bao nhiêu", bạn cần nối bảng users (chứa thành phố) với bảng orders (chứa số tiền). Đó là việc của JOIN, nối qua cột chung (thường là user_id). JOIN là khái niệm khó nhất với người mới nhưng cũng là thứ mở khóa năng lực thật sự — nên nó được dành riêng cho tuần thứ ba trong lộ trình.

Thứ PM KHÔNG cần học (ít nhất lúc đầu)

Để khỏi lạc lối, hãy nhớ những thứ bạn nên bỏ qua trong giai đoạn đầu: stored procedures, indexing, query optimization, window functions phức tạp, các thao tác ghi/xóa dữ liệu (INSERT, UPDATE, DELETE). PM hầu như chỉ đọc dữ liệu, không sửa. Tập trung vào đọc giúp bạn an toàn (không sợ làm hỏng gì) và học nhanh hơn nhiều.

Tình huống thực tế

Tình huống 1 — PM tại một ví điện tử trả lời sếp trong 5 phút

Linh là Associate PM phụ trách tính năng "thanh toán hóa đơn" tại một ví điện tử lớn ở TP.HCM. Sau khi team launch giao diện mới, Giám đốc sản phẩm hỏi trong cuộc họp: "Tỷ lệ user hoàn tất thanh toán hóa đơn tuần này so với tuần trước thế nào?". Trước đây Linh sẽ phải nhờ data analyst, và câu trả lời thường về sau 1-2 ngày, khi cuộc tranh luận đã nguội.

Lần này Linh đã học SQL. Cô mở Metabase, gõ một query đếm số user có event = 'bill_payment_success' nhóm theo tuần, chia cho số user có event = 'bill_payment_start'. Trong vòng năm phút, cô trả lời ngay trong cuộc họp: tỷ lệ hoàn tất tăng từ 71% lên 78%, nhưng riêng nhóm hóa đơn điện lực lại giảm. Cả phòng quay sang bàn về hóa đơn điện lực.

Bài học rút ra: Tốc độ trả lời thay đổi cả vai trò của bạn trong phòng họp. Khi bạn tự chủ dữ liệu, bạn chuyển từ "người đặt câu hỏi" sang "người dẫn dắt thảo luận". Đây chính là khác biệt giúp một APM được nhìn nhận là sẵn sàng lên PM.

Tình huống 2 — Phát hiện vấn đề mà không ai để ý

Tại một sàn thương mại điện tử (giả định tên ShopViet), PM phụ trách mảng người bán nhận thấy doanh thu ổn định, mọi báo cáo tổng đều xanh. Nhưng anh tò mò chạy một query đơn giản: đếm số người bán mới có đơn hàng đầu tiên trong vòng 7 ngày sau khi đăng ký, nhóm theo từng tháng.

Con số khiến anh giật mình: tỷ lệ "kích hoạt" của người bán mới đã âm thầm giảm từ 45% xuống 31% trong ba tháng, dù tổng doanh thu vẫn tăng nhờ các người bán cũ. Vấn đề bị che giấu sau con số tổng. Anh đào sâu thêm bằng GROUP BY theo nguồn đăng ký và phát hiện luồng onboarding từ một chiến dịch quảng cáo mới đang mang về người bán kém chất lượng.

Bài học rút ra: SQL không chỉ để trả lời câu hỏi có sẵn, mà để tự mình tìm ra câu hỏi đúng. Con số tổng thường nói dối; chỉ khi bạn tự cắt lát dữ liệu (segment) thì sự thật mới lộ ra. Một PM biết query sẽ phát hiện vấn đề sớm hơn cả tháng so với việc chờ báo cáo định kỳ.

Tình huống 3 — Vòng phỏng vấn SQL khi ứng tuyển PM

Trang chuyển nghề từ marketing sang PM và ứng tuyển vào một công ty công nghệ. Đến vòng kỹ thuật, nhà tuyển dụng đưa ra một bài: "Cho bảng users và bảng transactions, hãy viết query tìm 10 user có tổng giá trị giao dịch cao nhất trong quý vừa qua, kèm thành phố của họ". Đây là bài kết hợp JOIN, WHERE lọc thời gian, SUM(), GROUP BY, ORDER BY và LIMIT — chính xác những gì lộ trình bốn tuần bao phủ.

Trang không viết query hoàn hảo tuyệt đối, nhưng cô nói rõ tư duy: "Em nối hai bảng qua user_id, lọc giao dịch theo quý, gom nhóm theo user để cộng tổng, rồi sắp xếp giảm dần lấy top 10". Người phỏng vấn đánh giá cao vì cô tư duy đúng như một PM dùng dữ liệu, chứ không phải kỹ sư.

Bài học rút ra: Ở các công ty công nghệ Việt Nam, một số vị trí PM (đặc biệt mảng fintech, e-commerce) có vòng đánh giá SQL nhẹ. Họ không kỳ vọng bạn viết query tối ưu, mà muốn thấy bạn tư duy được bằng dữ liệu. Bốn tuần học là đủ để vượt qua vòng này một cách tự tin.

Hướng dẫn từng bước

Đây là lộ trình bốn tuần, thiết kế cho người đi làm với khoảng 4-5 giờ mỗi tuần. Nguyên tắc xuyên suốt: học bằng cách gõ query thật, không học thuộc lý thuyết.

Tuần 1 — Nền tảng đọc và lọc dữ liệu

Mục tiêu: lấy được dữ liệu ra và lọc theo điều kiện. Học SELECT, FROM, WHERE, ORDER BY, LIMIT. Nắm các toán tử lọc: =, >, <, AND, OR, IN, BETWEEN, LIKE (tìm gần đúng cho text).

Bài tập đầu tuần nên đơn giản: "Lấy tất cả đơn hàng trên 500.000đ", "Tìm user đăng ký trong tháng 6 ở Hà Nội". Công cụ luyện tập đề xuất: SQLBolt (miễn phí, tương tác ngay trên trình duyệt) hoặc Mode SQL Tutorial. Mỗi ngày dành 30 phút làm vài bài là đủ.

Tuần 2 — Tổng hợp và gom nhóm

Đây là tuần biến bạn từ "người xem dữ liệu" thành "người phân tích". Học COUNT, SUM, AVG, MIN, MAX, rồi kết hợp với GROUP BY và HAVING (lọc trên kết quả đã gom nhóm).

Tập trả lời các câu hỏi sản phẩm thật: "Doanh thu theo từng tháng", "Số user mới theo từng thành phố", "Sản phẩm nào được đặt nhiều nhất". Mẹo quan trọng: hãy viết ra câu hỏi bằng tiếng Việt trước, rồi mới dịch sang SQL. Đây là kỹ năng cốt lõi của PM — biến nhu cầu kinh doanh thành câu hỏi dữ liệu.

Tuần 3 — JOIN, nối các bảng

Tuần khó nhất nhưng quan trọng nhất. Học INNER JOIN (chỉ lấy bản ghi khớp ở cả hai bảng) và LEFT JOIN (giữ tất cả bản ghi bảng trái, kể cả không khớp — rất hữu ích để tìm user "chưa từng mua hàng").

Hãy vẽ ra giấy hai bảng và mũi tên nối cột chung trước khi viết. Bài tập: "Doanh thu theo thành phố" (nối users và orders), "User đăng ký nhưng chưa từng đặt đơn nào" (LEFT JOIN rồi lọc IS NULL). Đừng nản nếu rối — gần như ai cũng vấp ở JOIN lần đầu.

Tuần 4 — Áp dụng vào công việc thật

Tuần này bỏ bài tập mẫu, chuyển sang dữ liệu thật của chính bạn. Xin quyền truy cập công cụ BI nội bộ — phổ biến ở Việt Nam là Metabase, Redash, Apache Superset hoặc dùng trực tiếp BigQuery/PostgreSQL. Nhờ data analyst chỉ cho bạn tên các bảng quan trọng và mối quan hệ giữa chúng (sơ đồ schema).

Chọn ba câu hỏi bạn thường phải đi hỏi người khác, và tự viết query trả lời. Khi xong, nhờ analyst review một lần để chắc chắn bạn dùng đúng bảng đúng định nghĩa metric. Sau tuần này, bạn đã có thể tự đứng vững.

Lỗi thường gặp & mẹo

Lỗi định nghĩa metric, không phải lỗi cú pháp. Sai lầm nguy hiểm nhất của PM không phải viết sai SQL mà là hiểu sai dữ liệu. Ví dụ bảng orders có cột status gồm cả đơn cancelled và refunded; nếu bạn quên lọc, "doanh thu" của bạn sẽ bị thổi phồng. Luôn hỏi data team: "Định nghĩa chuẩn của metric này là gì? Cần lọc những status nào?". Một query đúng cú pháp nhưng sai định nghĩa còn nguy hiểm hơn không có query, vì nó tạo ra niềm tin sai.

Quên rằng COUNT() đếm cả dòng trùng. Khi JOIN, một user có 5 đơn hàng sẽ xuất hiện 5 dòng. Nếu bạn COUNT() để đếm user, con số sẽ sai. Dùng COUNT(DISTINCT user_id) để đếm số user duy nhất. Đây là cái bẫy kinh điển khiến PM báo cáo sai số.

Nhầm lẫn WHERE và HAVING. WHERE lọc trước khi gom nhóm, HAVING lọc sau khi đã gom nhóm. Muốn lọc "các thành phố có trên 100 đơn" thì phải dùng HAVING COUNT(*) > 100, không phải WHERE.

Mẹo luôn LIMIT khi thử nghiệm. Trên dữ liệu thật hàng triệu dòng, một query thiếu điều kiện có thể chạy rất lâu hoặc làm chậm hệ thống. Khi đang mò mẫm, luôn thêm LIMIT 100 để xem thử nhanh, rồi mới bỏ ra khi đã chắc chắn.

Mẹo dùng AI làm trợ lý, không phải thay thế. Bạn hoàn toàn có thể nhờ ChatGPT hay Claude viết nháp query và giải thích. Nhưng bạn phải hiểu đủ để kiểm tra kết quả — nhất là phần định nghĩa metric mà AI không biết về dữ liệu nội bộ của bạn. AI tăng tốc, nhưng trách nhiệm đúng/sai vẫn là của bạn.

Mẹo lưu lại query hay dùng. Tạo một file hoặc dùng tính năng "saved questions" trong Metabase để lưu những query bạn chạy thường xuyên. Sau vài tháng, bạn sẽ có một bộ sưu tập trả lời được phần lớn câu hỏi định kỳ chỉ trong vài giây.

Bài tập thực hành

Hãy thực hiện trình tự sau trong bốn tuần. Đừng đọc lướt — gõ query thật mới có tác dụng.

  • Tuần 1: Hoàn thành toàn bộ phần SELECT, WHERE, ORDER BY trên SQLBolt (khoảng 8 bài đầu). Tự đặt và giải 5 câu hỏi lọc dữ liệu bằng tiếng Việt rồi dịch sang SQL.
  • Tuần 2: Viết query trả lời ba câu hỏi sau trên dữ liệu mẫu: (a) Doanh thu theo từng tháng, (b) Số user mới theo từng thành phố, sắp xếp giảm dần, (c) Top 10 sản phẩm bán chạy nhất. Bắt buộc dùng GROUP BY.
  • Tuần 3: Với hai bảng users và orders, viết: (a) Tổng chi tiêu của mỗi user kèm thành phố (INNER JOIN), (b) Danh sách user đã đăng ký nhưng chưa từng đặt đơn (LEFT JOIN + IS NULL).
  • Tuần 4 — bài tập then chốt: Liệt kê ba câu hỏi mà tháng vừa rồi bạn từng phải đi nhờ người khác trả lời. Tự viết query cho cả ba trên dữ liệu thật của công ty. Nhờ một data analyst review. Ghi lại bạn sai ở đâu — phần lớn sẽ là sai định nghĩa metric, và đó là bài học quý nhất.
  • Bài tập phỏng vấn: Giải lại bài trong Tình huống 3 — top 10 user chi tiêu cao nhất quý vừa qua kèm thành phố — và tập nói thành lời tư duy của bạn trong 60 giây, như đang trình bày với người phỏng vấn.

Tóm tắt

SQL là một trong những khoản đầu tư có tỷ suất sinh lời cao nhất cho người chuyển nghề sang PM, đặc biệt trong các lĩnh vực dữ liệu đậm đặc như fintech và e-commerce tại Việt Nam. Bạn không cần trở thành chuyên gia — chỉ cần đủ giỏi để tự trả lời 80% câu hỏi sản phẩm thường gặp, và điều đó hoàn toàn nằm trong tầm với sau bốn tuần học có kỷ luật.

Hãy nhớ ba điều cốt lõi: thứ nhất, làm chủ bộ khung sáu mệnh đề (SELECT, FROM, WHERE, GROUP BY, ORDER BY, LIMIT) cùng các hàm tổng hợp là đã đủ cho phần lớn công việc. Thứ hai, sai lầm nguy hiểm nhất không phải ở cú pháp mà ở định nghĩa metric — luôn xác minh với data team. Thứ ba, giá trị thật của SQL không chỉ là trả lời nhanh, mà là tự mình phát hiện ra những câu hỏi đúng mà con số tổng đang che giấu.

Lộ trình rất rõ ràng: tuần 1 đọc và lọc, tuần 2 tổng hợp và gom nhóm, tuần 3 nối bảng bằng JOIN, tuần 4 áp dụng vào dữ liệu thật của chính bạn. Bắt đầu ngay hôm nay với một bài SQLBolt, và bốn tuần nữa bạn sẽ là một PM tự chủ về dữ liệu — sẵn sàng dẫn dắt thảo luận thay vì chờ đợi câu trả lời.

Học xong bài này rồi? Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu, và học hết khóa thì có chứng chỉ. Lưu tiến độ của tôi