
Hàm query google sheet là hàm cho phép bạn lọc, sắp xếp và tổng hợp dữ liệu bằng một câu lệnh viết gần giống SQL, thay vì phải lồng hàng chục hàm FILTER, SUMIFS hay dùng bảng tổng hợp. Cấu trúc của nó rất ngắn: =QUERY(dữ_liệu; "câu truy vấn"; [số_dòng_tiêu_đề]) — toàn bộ phần khó nằm ở chuỗi truy vấn đặt trong dấu nháy kép. Trong bài này tôi đi từ cấu trúc, các mệnh đề cơ bản, cách lọc nhiều điều kiện, đến GROUP BY – PIVOT và danh sách lỗi hay gặp, tất cả đều dùng chung một bảng dữ liệu bán hàng mẫu để bạn làm theo được ngay.
Cấu trúc hàm QUERY trong Google Sheet gồm những gì?
Cấu trúc hàm QUERY trong Google Sheet chỉ có ba tham số: vùng dữ liệu, câu truy vấn dạng chuỗi, và số dòng tiêu đề.
- Dữ_liệu: vùng ô như
A1:H, hoặc kết quả của một hàm khác (IMPORTRANGE, mảng ghép…). - Câu truy vấn: một chuỗi trong dấu nháy kép, ví dụ
"select B, G where H = 'Hoàn thành'". Vì chuỗi đã dùng nháy kép ở ngoài, mọi giá trị chữ bên trong phải dùng nháy đơn. - Số dòng tiêu đề: thường là
1. Nếu bỏ trống, Google tự đoán và đôi khi đoán sai, nên tôi luôn ghi rõ.
Hai điểm làm người mới vấp nhiều nhất:
- Dấu ngăn tham số là
;hay,tuỳ cài đặt vùng (locale) của file. File để vùng Việt Nam thường dùng dấu chấm phẩy; file để vùng Mỹ dùng dấu phẩy. Trong bài tôi viết theo dấu chấm phẩy — nếu Sheet của bạn báo lỗi công thức, hãy đổi hết;ở ngoài chuỗi thành,. Lưu ý dấu phẩy bên trong chuỗi truy vấn (nhưselect B, C, G) thì luôn giữ nguyên. - Cách gọi tên cột. Khi dữ liệu là một vùng ô trong cùng file, cột gọi bằng chữ cái:
A,B,C. Khi dữ liệu là kết quả của hàm khác (mảng, IMPORTRANGE), cột phải gọi bằngCol1,Col2,Col3…
Ví dụ với IMPORTRANGE:
=QUERY(IMPORTRANGE("ID_FILE"; "DonHang!A1:H"); "select Col2, Col7 where Col8 = 'Hoàn thành'"; 1)
Cuối cùng, thứ tự các mệnh đề là bắt buộc, viết sai thứ tự là công thức báo lỗi ngay. Thứ tự đúng: select → where → group by → pivot → order by → limit → offset → label → format → options. Bạn không cần dùng hết, nhưng dùng cái nào thì phải đặt đúng chỗ của nó.

Dữ liệu mẫu dùng trong bài: bảng DonHang của một cửa hàng điện máy
Tôi dùng một bảng đơn hàng rút gọn của cửa hàng điện máy, đặt ở sheet tên DonHang, dữ liệu từ dòng 2, tiêu đề ở dòng 1:
| A – NgayDat | B – MaDon | C – KhachHang | D – NhanVien | E – SanPham | F – SoLuong | G – ThanhTien | H – TrangThai |
|---|---|---|---|---|---|---|---|
| 03/09/2026 | DH001 | Khách A | Hùng | Máy lạnh | 1 | 8500000 | Hoàn thành |
| 05/09/2026 | DH002 | Khách B | Lan | Tủ lạnh | 1 | 12000000 | Hoàn thành |
| 12/09/2026 | DH003 | Khách A | Hùng | Nồi cơm điện | 2 | 1800000 | Đã huỷ |
| 01/10/2026 | DH004 | Khách C | Lan | Máy giặt | 1 | 9500000 | Hoàn thành |
| 02/10/2026 | DH005 | Khách D | Hùng | Máy lạnh | 2 | 17000000 | Đang giao |
Hai điều kiện quan trọng để mọi công thức dưới đây chạy đúng: cột A phải là kiểu ngày thật (canh phải, định dạng ngày) chứ không phải chữ, và cột G phải là số thật chứ không có ô nào gõ kèm chữ "đ" hay dấu chấm thủ công.
Các mệnh đề cơ bản: SELECT, WHERE, ORDER BY, LIMIT
Bốn mệnh đề này đủ để làm 80% báo cáo hằng ngày: chọn cột, lọc dòng, sắp xếp, lấy top N.
=QUERY(A1:H; "select B, C, G where H = 'Hoàn thành' order by G desc limit 10"; 1)
Đọc câu này như tiếng Việt: lấy cột Mã đơn, Khách hàng, Thành tiền; chỉ những dòng trạng thái là "Hoàn thành"; sắp xếp thành tiền giảm dần; lấy 10 dòng đầu.
select *để lấy toàn bộ cột.order by G descgiảm dần,asctăng dần (mặc định là tăng dần).limit 10giới hạn số dòng; ghép vớioffset 10để bỏ qua 10 dòng đầu — tiện khi muốn xem "top 11–20".- Toán tử so sánh:
=,!=,>,>=,<,<=.
Một mẹo nhỏ tôi hay dùng: viết vùng là A1:H (không ghi số dòng cuối) để sau này thêm đơn hàng mới thì công thức tự tính luôn, không phải sửa lại vùng.
Hàm QUERY nhiều điều kiện trong Google Sheet viết thế nào?
Để viết hàm QUERY nhiều điều kiện trong Google Sheet, bạn nối các điều kiện trong mệnh đề where bằng and / or, và dùng dấu ngoặc đơn để gom nhóm khi trộn lẫn hai loại.
Kết hợp and, or và dấu ngoặc
Lấy đơn đã hoàn thành của nhân viên Hùng, giá trị trên 5 triệu:
=QUERY(A1:H; "select B, C, D, G where H = 'Hoàn thành' and D = 'Hùng' and G > 5000000"; 1)
Lấy đơn của Hùng hoặc Lan, nhưng chỉ những đơn từ 9 triệu trở lên:
=QUERY(A1:H; "select B, D, G where (D = 'Hùng' or D = 'Lan') and G >= 9000000"; 1)
Nếu bỏ cặp ngoặc đi, Sheet sẽ hiểu thành "tất cả đơn của Hùng" cộng với "đơn của Lan từ 9 triệu" — ra kết quả sai mà không hề báo lỗi. Đây là lỗi âm thầm nguy hiểm nhất khi làm báo cáo.
Lọc theo chuỗi: contains, starts with, matches
where E contains 'Máy'— chứa chuỗi con, phân biệt hoa thường.where C starts with 'Khách'— bắt đầu bằng; tương tự cóends with.where E matches 'Máy lạnh|Máy giặt'— khớp biểu thức chính quy, dấu|nghĩa là "hoặc". Rất hợp khi cần lọc một danh sách dài mà không muốn viết chục lầnor.where E like 'Máy%'— kiểu SQL,%thay cho nhiều ký tự.
Lọc theo khoảng ngày
Ngày phải viết bằng từ khoá date kèm chuỗi đúng định dạng yyyy-mm-dd, bất kể ô của bạn đang hiển thị dd/mm/yyyy:
=QUERY(A1:H; "select B, A, C, G where A >= date '2026-09-01' and A <= date '2026-09-30'"; 1)
Lấy điều kiện từ một ô tham chiếu
Đây là phần biến một công thức tĩnh thành một báo cáo có bộ lọc. Giả sử ô J1 là ô chọn tên nhân viên, J2 là ô chọn ngày bắt đầu. Bạn ngắt chuỗi và nối bằng dấu &:
=QUERY(A1:H; "select B, C, G where D = '"&J1&"'"; 1)
Với ngày, phải ép về chuỗi yyyy-mm-dd trước khi nối:
=QUERY(A1:H; "select B, A, G where A >= date '"&TEXT(J2; "yyyy-mm-dd")&"'"; 1)
Chỗ hay sai là bộ ba dấu nháy: '"&J1&"' — nháy đơn mở, nháy kép đóng chuỗi, dấu &, ô tham chiếu, dấu &, nháy kép mở chuỗi, nháy đơn đóng. Gõ chậm một lần rồi lưu lại làm mẫu, lần sau copy dùng lại.
Hàm QUERY nâng cao trong Google Sheet: GROUP BY, PIVOT, LABEL, FORMAT
Phần hàm QUERY nâng cao trong Google Sheet bắt đầu khi bạn không chỉ lọc dòng mà còn muốn tổng hợp số liệu — đây là lúc QUERY thay thế được cả bảng tổng hợp (Pivot table).
Doanh thu theo nhân viên:
=QUERY(A1:H; "select D, sum(G) where H = 'Hoàn thành' group by D order by sum(G) desc label D 'Nhân viên', sum(G) 'Doanh thu'"; 1)
Quy tắc vàng của group by: mọi cột trong select mà không nằm trong hàm tổng hợp thì bắt buộc phải xuất hiện trong group by. Các hàm tổng hợp dùng được: sum(), count(), avg(), max(), min().
Xoay bảng theo tháng bằng PIVOT:
=QUERY(A1:H; "select D, sum(G) where H = 'Hoàn thành' group by D pivot month(A)+1"; 1)
Kết quả: mỗi dòng là một nhân viên, mỗi cột là một tháng. Lưu ý hàm month() trong QUERY trả về 0 cho tháng 1, nên phải cộng thêm 1 để ra số tháng như người Việt quen đọc. Tương tự có year(A), day(A), dayOfWeek(A).
LABEL và FORMAT là hai mệnh đề làm báo cáo trông "ra dáng" hơn:
label sum(G) 'Doanh thu'— đổi tên tiêu đề cột, vì mặc định QUERY tự đặt là "sum ThanhTien".format sum(G) '#,##0'— định dạng số tiền có dấu phân cách hàng nghìn ngay trong công thức.- Muốn bỏ hẳn dòng tiêu đề:
label sum(G) ''(hai dấu nháy đơn liền nhau).
Trong thực tế triển khai, tôi hay để một sheet Báo cáo riêng với vài ô chọn ở trên cùng (nhân viên, từ ngày, đến ngày) và một công thức QUERY duy nhất ở dưới. Nhân viên cửa hàng chỉ việc đổi ô chọn, bảng tự chạy lại — không ai phải đụng vào công thức, cũng không ai xoá nhầm dữ liệu gốc.
Hàm QUERY có giống SQL không?
Giống về hình thức nhưng không phải SQL. QUERY dùng ngôn ngữ truy vấn của Google Visualization API — vay mượn cú pháp SQL cho dễ đọc, nhưng chỉ hỗ trợ một phần nhỏ và có vài thứ riêng. Nếu bạn đã biết SQL, bạn đọc câu QUERY hiểu ngay; ngược lại, học QUERY xong bạn mới đi được khoảng 30% quãng đường tới SQL thật.
| Khía cạnh | SQL | QUERY trong Google Sheet |
|---|---|---|
| select, where, group by, order by | Có | Có, cú pháp gần như y hệt |
| Nối bảng (JOIN) | Có | Không có |
| Truy vấn lồng (subquery) | Có | Không có |
| Cách gọi cột | Theo tên cột đã khai báo | Theo chữ cái A, B, C hoặc Col1, Col2 |
| Kiểu dữ liệu | Khai báo cố định cho từng cột | Tự suy đoán theo kiểu chiếm đa số trong cột |
| Xoay bảng | Phải viết tay hoặc dùng hàm riêng | Có sẵn mệnh đề pivot |
| Thêm, sửa, xoá dữ liệu | Có INSERT, UPDATE, DELETE | Chỉ đọc, không ghi được |
Khác biệt về kiểu dữ liệu là thứ gây đau đầu nhất và tôi nói kỹ ở phần lỗi bên dưới. Nếu bạn muốn đi xa hơn QUERY, lộ trình trong bài học SQL cho người mới bắt đầu sẽ nối tiếp khá tự nhiên từ những gì bạn vừa đọc.
Lỗi hay gặp khi dùng hàm QUERY và cách sửa
Hầu hết lỗi QUERY đều rơi vào năm nhóm dưới đây. Tôi sắp theo tần suất gặp khi hỗ trợ người dùng:
| Hiện tượng | Nguyên nhân | Cách sửa |
|---|---|---|
| Kết quả trả về trống ở một số ô dù nguồn có dữ liệu | Cột trộn cả số và chữ; QUERY lấy kiểu chiếm đa số và bỏ trống phần còn lại | Làm sạch cột, bỏ chữ "đ", khoảng trắng thừa; hoặc bọc cột đó bằng TO_TEXT() để ép về một kiểu |
| Báo lỗi cú pháp (PARSE_ERROR) | Sai thứ tự mệnh đề, hoặc thiếu dấu nháy đơn quanh giá trị chữ | Kiểm tra thứ tự select → where → group by → pivot → order by → limit; mọi giá trị chữ phải nằm trong nháy đơn |
| Lọc ngày không ra dòng nào | Viết where A >= '01/09/2026' hoặc quên từ khoá date | Dùng đúng date '2026-09-01'; nếu lấy từ ô thì bọc TEXT(ô; "yyyy-mm-dd") |
| Báo không nhận ra cột | Dữ liệu là kết quả hàm (IMPORTRANGE, mảng) nhưng vẫn gọi A, B, C | Đổi sang Col1, Col2… theo thứ tự cột trong vùng |
| Kết quả nhiều hơn mong đợi | Trộn and với or mà không đóng ngoặc | Gom nhóm điều kiện or vào trong dấu ngoặc đơn |
Một mẹo gỡ lỗi nhanh: khi công thức dài bị lỗi, hãy xoá bớt mệnh đề từ phải sang trái cho tới khi chạy được, rồi thêm lại từng cái. Trong vòng vài lần bạn sẽ chỉ đúng được mệnh đề nào đang hỏng, nhanh hơn nhiều so với ngồi soi cả chuỗi.
Tài liệu chính thức để tra cứu thêm: trang hướng dẫn hàm QUERY của Google và đặc tả ngôn ngữ truy vấn của Google Visualization API. Google có thể cập nhật tính năng, nên khi gặp hành vi lạ bạn nên đối chiếu với hai trang này trước.
Tóm tắt và bước tiếp theo nên làm
Những ý cần nhớ:
- Cấu trúc hàm QUERY trong Google Sheet chỉ có ba tham số; phần khó nằm ở chuỗi truy vấn và thứ tự mệnh đề bắt buộc.
- Nhiều điều kiện dùng
and/orvà luôn đóng ngoặc khi trộn hai loại. - Ngày luôn ở dạng
date 'yyyy-mm-dd'; điều kiện lấy từ ô thì nối chuỗi bằng dấu&. group byvàpivotthay được bảng tổng hợp;labelvàformatlàm báo cáo dễ đọc.- QUERY giống SQL về cú pháp nhưng không JOIN, không truy vấn lồng và chỉ đọc dữ liệu.
Bước tiếp theo để tự làm: mở một bản sao file bán hàng của bạn, tạo sheet Báo cáo, đặt ô chọn nhân viên ở J1 và ngày bắt đầu ở J2, rồi gõ lần lượt ba công thức trong bài — lọc cơ bản, lọc theo ô tham chiếu, và tổng hợp theo nhân viên. Làm xong ba cái đó là bạn đã dùng được QUERY cho công việc thật.
Nếu dữ liệu của bạn đã lớn tới mức QUERY bắt đầu chậm hoặc nhiều người cùng nhập một lúc, hai bài này sẽ hữu ích tiếp: dùng Google Sheet làm database — khi nào ổn, khi nào phải chuyển và AppSheet là gì và cách biến Google Sheet thành app.
Câu hỏi thường gặp
›Hàm QUERY có giống SQL không?
Giống về cú pháp nhưng không phải SQL. QUERY dùng ngôn ngữ truy vấn của Google Visualization API, vay mượn các mệnh đề select, where, group by, order by nên người biết SQL đọc hiểu ngay. Tuy nhiên QUERY không có JOIN, không có truy vấn lồng, chỉ đọc chứ không ghi dữ liệu, và gọi cột theo chữ cái A, B, C thay vì theo tên cột.
›QUERY có nối (JOIN) hai bảng được không?
Không. QUERY chỉ làm việc trên một vùng dữ liệu duy nhất. Nếu cần lấy thêm thông tin từ bảng khác, cách phổ biến là dùng VLOOKUP hoặc XLOOKUP để kéo cột cần thiết sang bảng chính trước, rồi mới chạy QUERY trên bảng đã ghép. Khi nhu cầu nối bảng trở nên thường xuyên, đó là dấu hiệu nên chuyển dữ liệu sang một cơ sở dữ liệu thật.
›Vì sao QUERY bỏ trống một số ô có dữ liệu?
Nguyên nhân gần như luôn là cột đó trộn cả số và chữ. QUERY chỉ nhận một kiểu dữ liệu cho mỗi cột và lấy kiểu chiếm đa số, phần dữ liệu thuộc kiểu thiểu số sẽ bị trả về trống. Cách sửa là làm sạch cột — bỏ chữ kèm theo số, bỏ khoảng trắng thừa — hoặc bọc cột đó bằng TO_TEXT() để ép tất cả về cùng một kiểu.
›Lọc theo khoảng ngày trong QUERY viết thế nào?
Dùng từ khoá date kèm chuỗi định dạng yyyy-mm-dd, ví dụ: =QUERY(A1:H; "select B, A, G where A >= date '2026-09-01' and A <= date '2026-09-30'"; 1). Nếu ngày lấy từ một ô, phải ép về chuỗi trước bằng TEXT(J2; "yyyy-mm-dd") rồi nối vào câu truy vấn bằng dấu &. Cột ngày trong bảng nguồn cũng phải là kiểu ngày thật, không phải chữ.
Tác giả
Chuyên gia chuyển đổi số · Đại diện 5F Edu
Hơn 8 năm triển khai và tư vấn chuyển đổi số cho doanh nghiệp vừa và nhỏ: chuẩn hoá quy trình, xây phần mềm quản lý bằng AppSheet và web app, tự động hoá bằng N8N. Người làm kênh YouTube Nghiện AppSheet.



