Hàm QUERY trong Google Sheets cho phép bạn viết một câu lệnh ngắn kiểu SQL để chọn cột, lọc dòng, cộng gộp theo nhóm và sắp xếp một bảng, tất cả trong một ô. Một công thức QUERY có thể thay cho cả chuỗi bộ lọc, bảng tạm và hàng chục ô SUMIFS. Cú pháp gốc là =QUERY(dải dữ liệu, "câu truy vấn", số dòng tiêu đề), trong đó câu truy vấn đặt trong ngoặc kép.
Điểm khó của QUERY không nằm ở ý tưởng mà ở cú pháp: thứ tự mệnh đề cố định, chữ phải để trong nháy đơn, ngày phải viết theo một khuôn riêng. Đây đúng là phần trợ lý AI làm tốt nếu bạn mô tả bảng rõ ràng. Bài này đi từ cấu trúc câu truy vấn, cách mô tả bảng để AI viết đúng ngay lần đầu, các mẫu hay dùng ở văn phòng, đến những lỗi QUERY hay báo và cách kiểm kết quả trước khi gửi đi.
QUERY làm được gì mà FILTER và SUMIFS làm không gọn bằng
Với một bảng đơn hàng gồm ngày, chi nhánh, nhân viên, mặt hàng, số lượng và thành tiền, nhu cầu hằng tuần thường là: lấy các đơn của một chi nhánh, chỉ giữ vài cột, sắp theo ngày; hoặc cộng thành tiền theo từng nhân viên rồi xếp từ cao xuống thấp. Làm bằng FILTER thì lọc được nhưng phải lồng thêm SORT và CHOOSECOLS hoặc chọn cột thủ công. Làm bằng SUMIFS thì phải tự gõ danh sách nhân viên ở một cột, rồi kéo công thức cho từng người, thêm người mới là phải nhớ thêm dòng.
QUERY gom các việc đó vào một chỗ. Câu select C, sum(F) where B = 'Cầu Giấy' group by C order by sum(F) desc vừa lọc chi nhánh, vừa liệt kê nhân viên tự động, vừa cộng và xếp hạng doanh số. Khi bảng gốc có thêm đơn hay thêm nhân viên mới, kết quả tự cập nhật mà không phải kéo công thức. Với người làm báo cáo hằng tuần, đây là khác biệt giữa sửa tay mỗi thứ Hai và mở tệp ra là có số.
QUERY cũng có giới hạn. Nó chỉ đọc được một dải dữ liệu liền mạch, không nối hai bảng theo khoá như phép JOIN trong cơ sở dữ liệu thật. Nó không có hàm xử lý chữ phong phú như REGEXEXTRACT. Và nó kén dữ liệu: một cột lẫn số với chữ sẽ cho kết quả thiếu mà không báo lỗi. Vì vậy QUERY hợp nhất với bảng đã gọn, mỗi cột một kiểu dữ liệu; bảng còn bẩn thì nên làm sạch trước, phần này có danh mục riêng trên trang.
Cấu trúc câu truy vấn: thứ tự mệnh đề không được đảo
Câu truy vấn của QUERY dùng ngôn ngữ truy vấn của Google, gần giống SQL nhưng không hoàn toàn giống. Các mệnh đề là tuỳ chọn, nhưng khi có mặt thì phải đứng đúng thứ tự dưới đây. Đảo thứ tự là lỗi phân tích cú pháp ngay.
| Thứ tự | Mệnh đề | Việc nó làm | Ví dụ ngắn |
|---|---|---|---|
| 1 | select | Chọn cột hoặc phép tính cần hiện | select A, C, F |
| 2 | where | Lọc dòng theo điều kiện | where F > 500000 and B = 'Hải Châu' |
| 3 | group by | Gộp nhóm để cộng, đếm, lấy trung bình | group by C |
| 4 | pivot | Xoay giá trị một cột thành nhiều cột | pivot B |
| 5 | order by | Sắp xếp | order by A desc |
| 6 | limit / offset | Lấy bao nhiêu dòng, bỏ qua bao nhiêu dòng đầu | limit 20 |
| 7 | label | Đặt lại tên tiêu đề cột kết quả | label sum(F) 'Doanh số' |
| 8 | format | Định dạng số, ngày trong kết quả | format A 'dd/mm/yyyy' |
Ba quy ước cần nhớ. Một: khi dữ liệu là dải ô bình thường, cột được gọi bằng chữ cái in hoa A, B, C theo đúng vị trí trên trang tính; khi dữ liệu đến từ một mảng, ví dụ kết quả của IMPORTRANGE hay dấu ngoặc nhọn ghép bảng, cột phải gọi là Col1, Col2, Col3. Hai: giá trị chữ đặt trong nháy đơn, cả câu truy vấn đặt trong nháy kép. Ba: ngày viết dạng date '2025-07-01', đúng khuôn năm-tháng-ngày, bất kể ô trên trang hiển thị ngày kiểu Việt Nam.
Thêm một chỗ hay vấp khi tách tháng: hàm month() trong câu truy vấn trả về tháng tính từ 0, tức tháng Một là 0 và tháng Mười Hai là 11. Muốn ra số tháng quen thuộc thì viết month(A)+1. AI đôi khi quên chi tiết này, nên đây là chỗ đầu tiên cần soi khi nhận công thức có chữ month.
Mô tả bảng cho AI để nhận về câu QUERY chạy được ngay
Trợ lý AI như ChatGPT, Claude, Gemini viết QUERY khá chắc tay, miễn là nó biết chính xác bảng của bạn trông thế nào. Phần lớn công thức sai không phải do AI kém mà do mô tả thiếu. Làm theo trình tự sau:
- Nói rõ là Google Sheets, không phải Excel. Excel không có hàm QUERY theo kiểu này; nếu không dặn, AI có thể trả về công thức Excel hoặc Power Query.
- Ghi tên trang tính, dải dữ liệu và dòng tiêu đề, ví dụ: trang tính tên DonHang, dữ liệu từ A1 đến F, dòng 1 là tiêu đề.
- Liệt kê từng cột kèm chữ cái và kiểu dữ liệu: A là ngày đơn, B là chi nhánh dạng chữ, C là tên nhân viên, D là mã hàng, E là số lượng dạng số, F là thành tiền dạng số.
- Dán ba đến năm dòng mẫu đã thay tên thật bằng tên giả. Không dán nguyên bảng khách hàng hay bảng lương thật vào chatbot; AI chỉ cần hình dạng dữ liệu, không cần dữ liệu thật.
- Mô tả kết quả mong muốn bằng lời của người dùng, kể cả cột nào, sắp thế nào, tiêu đề ra sao. Ví dụ: cần bảng hai cột, cột đầu là tên nhân viên, cột sau là tổng thành tiền tháng 7, xếp giảm dần, tiêu đề cột sau là Doanh số.
- Nói vùng của tệp: nếu bảng đặt vùng Việt Nam, dấu phân cách tham số thường là chấm phẩy thay cho dấu phẩy. Xem ở mục Cài đặt của tệp, phần ngôn ngữ và múi giờ, hoặc nhìn gợi ý hiện ra khi bạn gõ tên hàm.
- Yêu cầu AI giải thích từng mệnh đề sau khi viết. Câu giải thích giúp bạn tự sửa được khi bảng đổi cột về sau, thay vì quay lại hỏi từ đầu.
Một câu lệnh mẫu gói đủ các ý trên: Viết công thức QUERY cho Google Sheets. Trang tính DonHang, dữ liệu A1:F, dòng 1 là tiêu đề. A ngày đơn, B chi nhánh, C nhân viên, D mã hàng, E số lượng, F thành tiền. Cần tổng F theo từng nhân viên của chi nhánh Hải Châu trong tháng 7 năm 2025, xếp giảm dần, đổi tên cột tổng thành Doanh số. Bảng đặt vùng Việt Nam. Giải thích từng mệnh đề.
Năm mẫu truy vấn hay dùng ở văn phòng
Lọc và chọn cột. Câu select A, C, F where B = 'Ninh Kiều' order by A desc cho danh sách đơn của một chi nhánh, chỉ ba cột cần xem, đơn mới nhất lên đầu. Đây là mẫu thay cho thao tác lọc tay rồi chép sang trang khác mỗi tuần.
Lấy điều kiện từ một ô. Muốn đổi chi nhánh mà không sửa công thức, ghép chuỗi: "select A, C, F where B = '"&H1&"'", trong đó H1 là ô chọn chi nhánh. Nên đặt H1 là danh sách thả xuống để tránh gõ sai chính tả, vì so sánh chữ trong QUERY phân biệt hoa thường và dấu.
Cộng và đếm theo nhóm. Câu select C, count(D), sum(F) where A is not null group by C order by sum(F) desc label count(D) 'Số đơn', sum(F) 'Doanh số' cho mỗi nhân viên một dòng, kèm số đơn và tổng tiền. Mọi cột trong select mà không nằm trong hàm gộp thì bắt buộc phải có trong group by.
Lọc theo khoảng ngày lấy từ ô. Ngày trong ô phải đổi sang chữ đúng khuôn: "where A >= date '"&TEXT(H2,"yyyy-mm-dd")&"' and A <= date '"&TEXT(H3,"yyyy-mm-dd")&"'". Thiếu bước TEXT là lỗi hay gặp nhất khi lọc theo ngày.
Tìm theo một phần chữ, không phân biệt hoa thường. Câu where lower(D) contains 'vòng' bắt mọi mã hàng có chữ vòng dù gõ hoa hay thường. Ngoài contains còn có starts with, ends with và matches cho biểu thức chính quy đơn giản. Lưu ý chữ có dấu tiếng Việt phải gõ cùng một kiểu bảng mã; bảng nhập từ nhiều nguồn có thể lẫn dạng dựng sẵn và tổ hợp, nhìn giống nhau nhưng so không khớp.
Những lỗi QUERY hay gặp và cách đọc thông báo
Thông báo lỗi của QUERY bằng tiếng Anh và khá cộc, nhưng mỗi mã lỗi chỉ thẳng vào một nguyên nhân. Khi gặp, bạn có thể dán nguyên thông báo cùng công thức cho AI, nhưng tự đọc trước theo bảng này sẽ nhanh hơn.
| Dấu hiệu | Nguyên nhân thường gặp | Cách sửa |
|---|---|---|
| Thông báo có NO_COLUMN kèm một chữ cái | Gọi cột nằm ngoài dải dữ liệu, hoặc dùng A, B với dữ liệu dạng mảng | Mở rộng dải; với mảng thì đổi sang Col1, Col2 |
| Thông báo có ADD_COL_TO_GROUP_BY_OR_AGG | Có cột trong select không nằm trong group by và không bọc hàm gộp | Thêm cột đó vào group by hoặc bỏ khỏi select |
| PARSE_ERROR hoặc báo không phân tích được | Sai thứ tự mệnh đề, thiếu nháy đơn quanh chữ, dấu nháy cong do dán từ trình soạn thảo | Gõ lại nháy bằng bàn phím, kiểm thứ tự select, where, group by, order by |
| Kết quả thiếu một số dòng, không báo lỗi | Cột lẫn số và chữ; QUERY lấy kiểu chiếm đa số, giá trị kiểu thiểu số thành ô trống | Đưa cột về một kiểu, ví dụ số lưu dạng chữ thì đổi lại thành số |
| Tiêu đề kết quả dính chữ của dòng dữ liệu đầu | Không khai số dòng tiêu đề, QUERY tự đoán sai | Thêm tham số thứ ba, thường là 1 |
| Lọc ngày không ra gì | So ngày với chữ hoặc thiếu từ khoá date | Dùng date 'yyyy-mm-dd' và hàm TEXT khi lấy từ ô |
Lỗi thứ tư trong bảng nguy hiểm nhất vì nó im lặng. Một cột thành tiền có vài ô do ai đó gõ kèm chữ đ, hoặc dán từ hệ thống khác thành dạng chữ, sẽ bị QUERY coi là trống và tổng doanh số tụt xuống mà không ai hay. Trước khi tin một bảng tổng, đếm số ô có giá trị trong cột gốc bằng COUNTA và so với số ô là số bằng COUNT; hai con số lệch nhau là có ô lạc kiểu.
Kiểm kết quả trước khi tin và gửi đi
Công thức chạy ra số không có nghĩa là số đúng. Với công thức do AI viết, quy trình kiểm ngắn dưới đây tốn năm phút và tránh được những lần gửi báo cáo sai cho cả phòng:
- Đếm dòng: lấy số dòng kết quả của câu lọc, so với số dòng đếm được bằng COUNTIFS cùng điều kiện trên bảng gốc.
- Cộng tổng kiểm: tổng cột kết quả của câu group by phải bằng tổng cột gốc trong cùng điều kiện lọc, tính bằng SUMIFS. Lệch là có dòng rơi mất, thường do lỗi lẫn kiểu.
- Soi tay hai nhóm: chọn một nhân viên ít đơn và một nhân viên nhiều đơn, lọc tay trên bảng gốc, cộng bằng mắt hoặc bằng thanh trạng thái, so với dòng tương ứng của QUERY.
- Thử ca biên: đổi ô điều kiện sang một chi nhánh không có đơn, hoặc khoảng ngày rỗng, xem công thức trả về trống hay báo lỗi khó hiểu. Bọc IFERROR với lời nhắn rõ ràng nếu cần.
- Ghi chú công thức: đặt một ô ghi bằng lời công thức này lọc gì, cộng gì, ai viết, ngày nào. Người sau mở tệp không phải đoán.
Nếu bảng gốc có tên khách hàng hay số liệu nhạy cảm, mọi bước kiểm ở trên làm ngay trong tệp, không cần đưa dữ liệu thật ra ngoài. AI chỉ tham gia ở bước viết và giải thích công thức với dữ liệu mẫu giả định.
Khi nào không nên dùng QUERY
QUERY mạnh nhưng không phải lúc nào cũng là lựa chọn tốt. Với một điều kiện lọc đơn giản trên một cột, FILTER dễ đọc hơn với người cùng phòng và không đòi nhớ cú pháp truy vấn. Với một con số đơn lẻ như tổng tiền tháng này của một chi nhánh, SUMIFS rõ ràng hơn và không lo lỗi lẫn kiểu theo kiểu im lặng. Một nguyên tắc dễ áp dụng: nếu người nhận tệp không biết QUERY và sẽ phải tự sửa công thức, hãy chọn hàm họ đọc hiểu được.
Cũng không nên chồng QUERY lên QUERY nhiều tầng hay lên dữ liệu kéo từ nhiều tệp khác. Mỗi tầng làm bảng tính chậm hơn, và khi số liệu sai thì việc lần ngược trở nên rất mệt. Nếu bạn thấy mình cần nối nhiều bảng theo mã khách, mã hàng, có lẽ dữ liệu đã đến lúc chuyển sang thiết kế nhiều bảng có quan hệ hoặc một cơ sở dữ liệu nhỏ, chủ đề có danh mục riêng trên trang.
Cuối cùng, QUERY dừng ở việc lấy ra một bảng gọn. Đọc ý nghĩa của bảng đó, vẽ biểu đồ, so sánh xu hướng hay dựng bảng điều khiển là phần việc phân tích, được bàn ở trang AI Phân Tích của cùng hệ. Ở đây mục tiêu là để bảng tổng của bạn ra đúng, tự cập nhật và người khác đọc được công thức.
Câu hỏi thường gặp
Excel có hàm QUERY giống Google Sheets không?
Không có hàm cùng tên và cùng cú pháp. Trong Excel, việc tương tự thường làm bằng FILTER kết hợp SORT ở bản mới, bằng PivotTable hoặc bằng Power Query. Khi nhờ AI, hãy nói rõ phần mềm để nó không trộn cú pháp của hai bên vào nhau.
Vì sao QUERY báo lỗi khi dùng chữ cái cột với dữ liệu từ IMPORTRANGE?
Vì dữ liệu do IMPORTRANGE trả về là một mảng, không phải dải ô trên trang. Với mảng, QUERY chỉ hiểu tên cột dạng Col1, Col2, Col3 theo thứ tự cột trong mảng. Đổi chữ cái sang dạng này là công thức chạy.
Có nối hai bảng bằng QUERY như JOIN trong SQL được không?
Không trực tiếp. QUERY chỉ đọc một dải dữ liệu. Bạn có thể bổ sung cột từ bảng thứ hai vào bảng thứ nhất bằng XLOOKUP hoặc VLOOKUP trước, rồi mới QUERY trên bảng đã ghép. Nối nhiều bảng thường xuyên là dấu hiệu nên thiết kế lại dữ liệu.
Câu truy vấn có phân biệt chữ hoa, chữ thường không?
Có. So sánh bằng dấu bằng hay contains đều phân biệt hoa thường. Muốn bỏ qua khác biệt này, bọc cột trong hàm lower và viết giá trị cần tìm bằng chữ thường. Dấu tiếng Việt cũng phải khớp hoàn toàn, kể cả cách mã hoá ký tự.
QUERY có làm bảng tính chậm không?
Một vài công thức QUERY trên vài nghìn dòng thường không đáng kể. Bảng chậm rõ khi có hàng chục QUERY cùng đọc những cột rất dài, lồng nhau nhiều tầng hoặc đọc dữ liệu kéo từ tệp khác. Giới hạn dải đến dòng cần thiết và gom các truy vấn trùng nhau sẽ đỡ hơn.
Có nên dán cả bảng thật cho AI để nó viết QUERY chính xác hơn không?
Không cần và không nên. AI chỉ cần tên cột, kiểu dữ liệu và vài dòng mẫu đã thay bằng dữ liệu giả định. Bảng thật có thể chứa tên, số điện thoại, doanh số của khách hàng; đưa vào chatbot là đưa ra ngoài phạm vi kiểm soát của công ty.