↓ Chuyển đến nội dung chính
BA dùng SQL truy vấn dữ liệu trên màn hình
  1. Bài viết/

BA có cần biết SQL không? SELECT, JOIN, GROUP BY là đủ sống

·
Đặng Đức Quân
Tác giả
Đặng Đức Quân
Chuyện nghề BA trong lĩnh vực sản xuất. Viết cho mình, và cho cả những ai đang muốn dấn thân vào con đường này.

Cập nhật lần cuối:

Trả lời ngắn: BA không bắt buộc phải biết SQL, nhưng nên biết ở mức SELECT, JOIN, GROUP BY, mức đó đủ để tự trả lời phần lớn câu hỏi dạng bao nhiêu, mấy cái, theo từng tháng, và đủ để kiểm tra requirement với dữ liệu thật, không cần học tới mức developer.

Thử hình dung cuộc họp với phòng kinh doanh, trưởng phòng hỏi tháng trước có bao nhiêu đơn bị khách trả lại, chủ yếu là sản phẩm nào, bạn hứa sẽ gửi số, về chỗ nhắn dev nhờ lấy, dev đang chạy deadline nên ba ngày sau mới có file, mà tới lúc đó câu hỏi đã đổi, cuộc họp tiếp theo cũng đã diễn ra rồi. Tình huống kiểu này là lý do nhiều BA bắt đầu học SQL, và câu hỏi là học tới đâu thì vừa, để khỏi mất cả năm cày khóa database.

SQL với BA để làm gì
#

Với BA, SQL là cái ống nhòm nhìn vào dữ liệu, vì phần lớn câu hỏi stakeholder đặt ra có dạng bao nhiêu, mấy cái, từ khi nào, theo từng nhóm nào, mấy câu này chỉ cần vài dòng query. Nó giúp hai việc. Việc thứ nhất là tự trả lời câu hỏi nghiệp vụ, đỡ phải xếp hàng chờ dev. Việc thứ hai, ít người nói tới hơn, là kiểm tra requirement, trước khi viết “báo cáo hiển thị lý do trả hàng” thì mở dữ liệu ra xem hệ thống có lưu lý do trả hàng không, lưu dạng chọn từ danh sách hay gõ tự do, vì câu trả lời đổi hẳn cách bạn viết requirement.

Bài Làm BA có cần biết code không bàn rộng hơn về kiến thức kỹ thuật cho BA, bài này chỉ tập trung vào SQL.

ba câu lệnh là đủ sống
#

SELECT là đọc dữ liệu ra, lấy những cột nào, từ bảng nào, đi kèm là WHERE để lọc, ví dụ đơn tạo trong tháng 9 có trạng thái đã trả, đây là câu bạn dùng nhiều nhất.

SELECT order_no, customer_id, status
FROM orders
WHERE order_date >= '2026-09-01' AND status = 'RETURNED';

JOIN là ghép hai bảng. Bảng đơn hàng thường chỉ lưu mã khách, còn tên khách nằm ở bảng khách hàng, muốn biết đơn của ai thì JOIN hai bảng qua mã khách, hiểu JOIN là hiểu vì sao dữ liệu không nằm một cục, và đây cũng là chỗ ERD giúp bạn rất nhiều, bài ERD cho BA có hướng dẫn đọc sơ đồ quan hệ bảng.

GROUP BY là gom nhóm rồi đếm hoặc cộng, câu hỏi nào có chữ “mỗi” hoặc “theo từng” thì gần như chắc chắn cần GROUP BY kèm COUNT hoặc SUM.

SELECT p.product_name, COUNT(*) AS so_don_tra
FROM orders o
JOIN products p ON p.product_id = o.product_id
WHERE o.status = 'RETURNED'
GROUP BY p.product_name
ORDER BY so_don_tra DESC;

Hai câu trên trả lời đúng câu hỏi của trưởng phòng ở đầu bài, còn tên bảng và cột chỉ là ví dụ, hệ thống thật sẽ khác.

chỗ hay sai là đếm sai vì JOIN sai
#

Lỗi phổ biến của người mới không nằm ở cú pháp mà ở chỗ JOIN nhân bản dòng, một đơn hàng có ba dòng sản phẩm, JOIN sang bảng chi tiết rồi COUNT(*) thì một đơn hóa thành ba, con số trông rất hợp lý, chỉ có điều là sai, mà đem số sai vào cuộc họp thì còn tệ hơn không có số. Cách tránh là trước khi đếm tự hỏi một dòng kết quả đang đại diện cho cái gì, một đơn hay một dòng sản phẩm, cần đếm đơn thì dùng COUNT(DISTINCT order_no), và luôn đối chiếu một hai con số với màn hình báo cáo có sẵn trong hệ thống trước khi gửi đi.

bắt đầu học từ đâu
#

Đừng mở đầu bằng một khóa lý thuyết dài về cơ sở dữ liệu, lấy một bộ dữ liệu mẫu có vài bảng liên quan tới nhau kiểu khách hàng, đơn hàng, sản phẩm, nhiều hệ quản trị cơ sở dữ liệu có sẵn database mẫu như vậy, hoặc bạn tự tạo vài bảng nhỏ trong SQLite. Rồi tự đóng vai stakeholder đặt mười câu hỏi, mỗi tháng có bao nhiêu đơn, khách nào mua nhiều nhất, sản phẩm nào chưa bán được lần nào, mỗi câu viết một query, chạy, rồi tự kiểm tra bằng cách đếm tay trên vài dòng, câu nào không viết được là đúng chỗ bạn cần học tiếp. Cách này chậm hơn xem video, nhưng thứ bạn nhớ được là cách biến câu hỏi nghiệp vụ thành query, đúng cái BA cần.

đừng đâm đầu làm DBA
#

Học SQL đủ dùng khác với chạy theo database, BA không cần viết stored procedure, tối ưu index hay lo phân quyền với backup, đó là việc của dev và DBA, và nhiều nơi cũng chỉ cho BA quyền đọc trên môi trường test hoặc bản sao dữ liệu, như vậy là hợp lý. Một mẹo nhỏ là khi viết acceptance criteria cho báo cáo, chạy thử query để chắc field cần dùng có tồn tại và có dữ liệu, phát hiện thiếu field ở bước viết tài liệu rẻ hơn nhiều so với lúc dev đã code xong.

Cứ học lần lượt SELECT, JOIN, GROUP BY, tập trên một bộ dữ liệu mẫu, rồi đem ra trả lời câu hỏi thật trong công việc, đủ dùng là đủ, phần sức còn lại để dành cho phân tích. Có câu hỏi dữ liệu nào bạn đang phải chờ người khác lấy số mà nghĩ lại thì tự viết query được không? Kể mình nghe qua Facebook hoặc LinkedIn.

Bài viết liên quan

Phỏng vấn BA fresher: câu hỏi thật, trả lời theo STAR

·
Lần đầu đi phỏng vấn BA, mình bị hỏi một câu tưởng dễ, em kể một lần em làm việc với stakeholder khó tính đi, thế là ngồi im mấy giây rồi lắp bắp vài câu chung chung kiểu em luôn lắng nghe, em kiên nhẫn, về nhà mới tiếc, chuyện thật thì đầy mà không biết kể sao cho ra hồn. Đi vài vòng mình mới ngộ ra, nhà tuyển dụng không hỏi định nghĩa để chấm điểm thuộc bài, họ hỏi tình huống để xem em xử lý thật thế nào, mà fresher thì chưa có nhiều dự án để khoe, nên cách kể mới là thứ quyết định.

Lộ trình fresher BA lên senior: mất bao lâu?

·
Giả sử có bạn nhắn hỏi mình, anh ơi em làm BA được hơn một năm rồi, bao lâu thì lên senior được? Theo mình câu trả lời tốt nhất là hỏi ngược lại, em đã tự chịu trách nhiệm với một requirement nào chưa, hay mới làm theo bàn giao, vì lên senior nằm ở câu đó nhiều hơn là ở số năm. Nên bài này mình không viết kiểu cứ đủ 5 năm là tự động lên senior, số năm tự nó chẳng nói lên điều gì, dưới đây chỉ là cách mình nhìn cái lộ trình này.

User story và acceptance criteria: fresher hay sai gì?

·
Giả sử bạn mở một file spec ra, toàn những câu kiểu “Hệ thống cho phép người dùng thêm sản phẩm vào giỏ hàng”, đọc lướt thì tưởng đúng, nhưng hỏi lại một câu thêm vào giỏ để làm gì thì chưa chắc người viết trả lời được. Theo mình user story hay bị viết bừa ở đúng phần “để làm gì”, viết đủ là ai, muốn chức năng gì, còn mục đích thì chỉ là giả định với đoán mò.