Cơ bảnHướng dẫnClaude ChatNguồn: Anthropic

Claude cho Data: Viết database queries từ ngôn ngữ tự nhiên

Nghe bài viết
00:00

Điểm nổi bật

Nhấn để đến mục tương ứng

  1. 1 Khi triển khai cú pháp cơ bản, điều cốt lõi là Đơn giản nhất chỉ cần mô tả bạn muốn gì: Tôi dùng PostgreSQL. Bảng orders có cột: order_id, customer_id, created_at, status, total_amount, province — hiểu đúng nguyên lý này giúp bạn tránh sai lầm phổ biến và đạt kết quả tốt hơn ngay từ đầu.
  2. 2 Một thực tế quan trọng về năm loại câu hỏi claude xử lý tốt nhất: 1. Tổng hợp và đếm Tổng doanh thu, số đơn hàng, và giá trị đơn trung bình theo tháng trong Q1/2026. Kết quả có cả % thay đổi so với cùng kỳ năm ngoái. 2 — tuy mang lại lợi ích rõ ràng nhưng cũng đòi hỏi đầu tư thời gian học và thử nghiệm phù hợp.
  3. 3 Theo phân tích ví dụ đầy đủ: báo cáo kpi tháng, Môi trường: Snowflake Schema: analytics Viết query báo cáo KPI tháng 3/2026 cho CEO: 1. Tổng GMV đơn completed + delivered 2. Số đơn hàng mới 3. Số khách hàng mới lần đầu mua 4. AOV Average Order Value 5 — con số thực tế này đáng để tham khảo khi lập kế hoạch triển khai cho dự án của bạn.
  4. 4 Muốn làm chủ khi claude cần hỏi thêm, hãy bắt đầu từ việc hiểu Nếu yêu cầu có thể hiểu theo nhiều cách, Claude sẽ hỏi rõ trước khi viết: "Bạn muốn 'khách hàng mới' nghĩa là A đăng ký trong tháng đó hay B lần đầu tiên mua hàng trong tháng đó? Hai — kỹ thuật này được nhiều developer áp dụng thành công trong dự án thực tế.
  5. 5 Điểm cần cân nhắc khi sử dụng mẹo cho người mới bắt đầu: Bắt đầu đơn giản : Hỏi từng câu nhỏ, ghép lại sau — thay vì một câu siêu phức tạp ngay Nêu dialect ngay đầu — không phải mọi trường hợp đều phù hợp, cần đánh giá bối cảnh cụ thể trước khi áp dụng.
flying bee

Bạn không cần nhớ cú pháp DATE_TRUNC của PostgreSQL hay cách FLATTEN array trong Snowflake. Chỉ cần mô tả dữ liệu bạn cần bằng ngôn ngữ bình thường — Claude sẽ viết SQL chính xác, tối ưu, và sẵn sàng chạy. Đây là cánh cổng để mọi người trong team, dù không phải kỹ thuật, đều có thể tự trả lời câu hỏi về dữ liệu.

Cú pháp cơ bản

Đơn giản nhất chỉ cần mô tả bạn muốn gì:

Tôi dùng PostgreSQL. Bảng orders có cột:
order_id, customer_id, created_at, status, total_amount, province.

Viết query: đếm số đơn hàng theo tỉnh thành trong tháng 3/2026,
chỉ đơn đã completed, sắp xếp giảm dần.

Claude trả về ngay:

SELECT
    province,
    COUNT(*) AS order_count
FROM orders
WHERE DATE_TRUNC('month', created_at) = '2026-03-01'
  AND status = 'completed'
GROUP BY province
ORDER BY order_count DESC;

Năm loại câu hỏi Claude xử lý tốt nhất

1. Tổng hợp và đếm

Tổng doanh thu, số đơn hàng, và giá trị đơn trung bình
theo tháng trong Q1/2026. Kết quả có cả % thay đổi
so với cùng kỳ năm ngoái.

2. Top N ranking

Top 10 khách hàng chi tiêu nhiều nhất trong 90 ngày gần đây.
Bao gồm: tên, email, tổng chi tiêu, số lần mua, lần mua gần nhất.

3. Phân tích cohort

Nhóm khách hàng theo tháng đăng ký đầu tiên.
Với mỗi cohort, tính số % còn mua hàng trong tháng 1, 3, 6 sau đăng ký.
"Còn mua hàng" = có ít nhất 1 order completed trong tháng đó.

4. Phân tích funnel

Phân tích funnel từ add-to-cart đến purchase trong tháng 3.
Tính số unique users ở mỗi bước và tỷ lệ drop-off.
Bước: view_product, add_to_cart, checkout_start, payment_complete.

5. Tìm bất thường

Tìm các đơn hàng bất thường trong tháng 3:
- Cùng một khách hàng đặt hơn 10 đơn trong 1 giờ
- Đơn có tổng tiền lớn hơn 50 triệu VND
- Đơn giao về cùng địa chỉ nhưng khác customer_id

Cung cấp context giúp Claude viết đúng hơn

Câu hỏi mơ hồ ra query kém. Bao gồm context này để tăng độ chính xác:

Dialect database

Dùng BigQuery (Google Cloud), dữ liệu partition theo event_date.

Tên bảng và cột chính

Bảng chính: analytics.orders
Các cột: order_id (STRING), customer_id (STRING),
         order_date (DATE), status (STRING),
         gmv (NUMERIC), channel (STRING)

Định nghĩa metric của công ty

Lưu ý: "doanh thu" ở công ty tôi = GMV của orders
có status IN ('completed', 'delivered').
Không bao gồm 'pending' và 'cancelled'.

Standard filters luôn cần áp dụng

Luôn filter: is_test_order = false
và source != 'internal_qa'

Ví dụ đầy đủ: Báo cáo KPI tháng

Môi trường: Snowflake
Schema: analytics

Viết query báo cáo KPI tháng 3/2026 cho CEO:

1. Tổng GMV (đơn completed + delivered)
2. Số đơn hàng mới
3. Số khách hàng mới (lần đầu mua)
4. AOV (Average Order Value)
5. So sánh với tháng 2/2026 (% thay đổi)

Bảng: analytics.orders (order_id, customer_id, order_date,
status, gmv, is_test_order)

Luôn filter is_test_order = false.
Format output: metric, gia_tri_t3, gia_tri_t2, pct_change

Output từ Claude:

WITH
march_data AS (
    SELECT
        SUM(CASE WHEN status IN ('completed', 'delivered') THEN gmv ELSE 0 END) AS total_gmv,
        COUNT(*) AS total_orders,
        COUNT(DISTINCT customer_id) AS unique_customers,
        AVG(CASE WHEN status IN ('completed', 'delivered') THEN gmv END) AS avg_order_value
    FROM analytics.orders
    WHERE DATE_TRUNC('MONTH', order_date) = '2026-03-01'
      AND is_test_order = false
),
feb_data AS (
    SELECT
        SUM(CASE WHEN status IN ('completed', 'delivered') THEN gmv ELSE 0 END) AS total_gmv,
        COUNT(*) AS total_orders,
        COUNT(DISTINCT customer_id) AS unique_customers,
        AVG(CASE WHEN status IN ('completed', 'delivered') THEN gmv END) AS avg_order_value
    FROM analytics.orders
    WHERE DATE_TRUNC('MONTH', order_date) = '2026-02-01'
      AND is_test_order = false
),
new_customers_march AS (
    SELECT COUNT(DISTINCT customer_id) AS new_customers
    FROM analytics.orders
    WHERE DATE_TRUNC('MONTH', order_date) = '2026-03-01'
      AND is_test_order = false
      AND customer_id NOT IN (
          SELECT DISTINCT customer_id FROM analytics.orders
          WHERE order_date < '2026-03-01' AND is_test_order = false
      )
),
new_customers_feb AS (
    SELECT COUNT(DISTINCT customer_id) AS new_customers
    FROM analytics.orders
    WHERE DATE_TRUNC('MONTH', order_date) = '2026-02-01'
      AND is_test_order = false
      AND customer_id NOT IN (
          SELECT DISTINCT customer_id FROM analytics.orders
          WHERE order_date < '2026-02-01' AND is_test_order = false
      )
)
SELECT
    metric,
    gia_tri_t3,
    gia_tri_t2,
    ROUND(100.0 * (gia_tri_t3 - gia_tri_t2) / NULLIF(gia_tri_t2, 0), 1) AS pct_change
FROM (
    SELECT 'GMV (VND)'          AS metric, m.total_gmv        AS gia_tri_t3, f.total_gmv        AS gia_tri_t2 FROM march_data m, feb_data f
    UNION ALL
    SELECT 'So don hang',                   m.total_orders,                  f.total_orders     FROM march_data m, feb_data f
    UNION ALL
    SELECT 'Khach hang moi',               nc_m.new_customers,              nc_f.new_customers FROM new_customers_march nc_m, new_customers_feb nc_f
    UNION ALL
    SELECT 'AOV (VND)',                     m.avg_order_value,               f.avg_order_value  FROM march_data m, feb_data f
) kpis
ORDER BY metric;

Khi Claude cần hỏi thêm

Nếu yêu cầu có thể hiểu theo nhiều cách, Claude sẽ hỏi rõ trước khi viết:

"Bạn muốn 'khách hàng mới' nghĩa là (A) đăng ký trong tháng đó hay (B) lần đầu tiên mua hàng trong tháng đó? Hai cách tính sẽ cho kết quả khác nhau."

Đây là tín hiệu tốt — Claude đang giúp bạn làm rõ yêu cầu kinh doanh trước khi code, tránh phải chạy lại query.

Chạy query và tự điều chỉnh

Nếu có kết nối data warehouse, Claude không chỉ viết mà còn chạy và validate:

Chạy query vừa viết và kiểm tra:
1. Số hàng trả về có hợp lý không?
2. Tổng GMV có trong tầm hợp lý không (khoảng 50-200 tỷ)?
3. Có NULL nào bất thường không?
Nếu kết quả trông sai, tự động debug và sửa.

Mẹo cho người mới bắt đầu

  • Bắt đầu đơn giản: Hỏi từng câu nhỏ, ghép lại sau — thay vì một câu siêu phức tạp ngay
  • Nêu dialect ngay đầu: "Tôi dùng PostgreSQL" một lần là đủ cho cả session
  • Dùng tên cột thật: Nếu biết tên cột, nêu ra — giúp query chính xác hơn nhiều
  • Luôn hỏi giải thích: "Giải thích query này làm gì từng bước" — vừa học vừa verify logic
  • Yêu cầu variation: "Viết thêm một cách khác để tôi so sánh performance"

Bước tiếp theo

Khi đã quen với natural language to SQL, nâng cấp lên viết SQL queries phức tạp để hiểu cách dùng CTEs, window functions, và tối ưu hiệu suất cho dataset hàng triệu hàng.


Bài viết liên quan

Tính năng liên quan:Natural Language to SQLQuery WritingDatabase Access

Bai viet co huu ich khong?

Bản quyền thuộc về tác giả. Vui lòng dẫn nguồn khi chia sẻ.

Bình luận (0)
Ảnh đại diện
Đăng nhập để bình luận...
Đăng nhập để bình luận
  • Đang tải bình luận...

Đăng ký nhận bản tin

Nhận bài viết hay nhất về sản phẩm và vận hành, gửi thẳng vào hộp thư của bạn.

Bảo mật thông tin. Hủy đăng ký bất cứ lúc nào. Chính sách bảo mật.