---
title: QUERY – ฟังก์ชันค้นหาและจัดการข้อมูลด้วยภาษา SQL-like
url: https://www.thepexcel.com/functions/google-sheets/google/query-google-sheets/
type: function-explainer
program: Google Sheets
syntax: "=QUERY(data, query, [headers])"
date: 2025-12-20
scores:
  popularity: 10
  difficulty: 7
  usefulness: 10
---

# QUERY – ฟังก์ชันค้นหาและจัดการข้อมูลด้วยภาษา SQL-like

> ค้นหาและจัดการข้อมูลด้วยภาษา SQL-like ในสูตรเดียว (มีเฉพาะ Google Sheets)

## คำอธิบาย

QUERY ใช้ภาษา SQL-like (Google Visualization API Query Language) ในการจัดการข้อมูลจาก Range ที่กำหนด รองรับ 9 clauses ตามลำดับ: SELECT, WHERE, GROUP BY, PIVOT, ORDER BY, LIMIT, OFFSET, LABEL, FORMAT พร้อม Aggregate Functions (SUM, COUNT, AVG, MIN, MAX) และ Scalar Functions สำหรับวันที่และข้อความ ทำให้สามารถกรอง จัดเรียง และสรุปข้อมูลได้แบบ Dynamic ด้วยสูตรเดียว เหมาะสำหรับการสร้างรายงานและ Dashboard ที่ซับซ้อน

## Syntax

```excel
=QUERY(data, query, [headers])
```

## Arguments

| Name | Required | Type | Default | Description |
| --- | --- | --- | --- | --- |
| data | Yes | Range/Array |  | ช่วงข้อมูลที่ต้องการ Query เช่น A1:F100 หรือ Sheet2!A:F สามารถใช้ข้อมูลจาก Sheet อื่นหรือรวมหลาย Range ด้วย {} ได้ ถ้าใช้ {} ต้องเปลี่ยนจาก A, B, C เป็น Col1, Col2, Col3 แทน |
| query | Yes | Text |  | คำสั่ง Query ในรูปแบบ SQL-like ต้องใส่ใน "" (Double Quote) ต้องเขียน Clauses ตามลำดับนี้เท่านั้น: SELECT, WHERE, GROUP BY, PIVOT, ORDER BY, LIMIT, OFFSET, LABEL, FORMAT Keywords ไม่ต้อง case-sensitive แต่ตัวอักษรคอลัมน์ต้องเป็นตัวพิมพ์ใหญ่ (A, B, C) |
| headers | No | Number | -1 | จำนวนแถวส่วนหัว (Header) ในข้อมูลต้นฉบับ -1 = Google Sheets จะเดาเอง (ไม่แนะนำ อาจผิดพลาด) 0 = ไม่มีแถวส่วนหัว 1 = มี 1 แถวส่วนหัว (แนะนำให้ระบุชัดเจน) มากกว่า 1 = มีหลายแถวส่วนหัว |

## เคสการใช้งาน

### กรองข้อมูลตามเงื่อนไขซับซ้อน

ใช้ WHERE เพื่อกรองข้อมูลด้วยเงื่อนไขหลายอย่างพร้อมกัน เช่น ยอดขายมากกว่า 10,000 บาท AND ภูมิภาคเป็น 'กรุงเทพ' หรือใช้ contains, starts with, matches สำหรับ Text

### สร้างรายงาน Top N

ใช้ ORDER BY เพื่อเรียงข้อมูล และ LIMIT เพื่อแสดงเฉพาะ Top N เช่น 10 อันดับสินค้าขายดีที่สุด หรือ 5 ลูกค้าที่ซื้อมากที่สุด

### สรุปข้อมูลแบบกลุ่ม (เหมือน Pivot Table)

ใช้ GROUP BY ร่วมกับ Aggregate Functions (SUM, COUNT, AVG, MIN, MAX) เพื่อสรุปยอดรวมตามภูมิภาค สินค้า หรือช่วงเวลา

### สร้าง Cross-tab Report ด้วย PIVOT

ใช้ PIVOT เพื่อแปลงค่าในแถวให้กลายเป็นคอลัมน์ใหม่ สร้างตาราง Cross-tabulation แบบ Dynamic โดยไม่ต้องใช้ Pivot Table

### รวมข้อมูลจากหลาย Sheet

ใช้ {} เพื่อรวมข้อมูลจากหลาย Sheet หรือหลาย Range มา Query ในสูตรเดียว ช่วยสร้าง Dashboard ที่ดึงข้อมูลจากหลายแหล่ง

## ตัวอย่าง

### 1. ตัวอย่างที่ 1: SELECT และ WHERE - เลือกคอลัมน์และกรองข้อมูล

```excel
=QUERY({"Product","Region","Sales";"iPhone","North",50000;"iPad","South",30000;"iPhone","South",45000;"Mac","North",80000}, "SELECT Col1, Col3 WHERE Col3 > 40000", 1)
```

**ผลลัพธ์:** `Product | Sales
iPhone  | 50000
iPhone  | 45000
Mac     | 80000`

สูตรนี้สร้าง Array ข้อมูลสินค้าขึ้นมาเลย (ไม่ต้องอ้างอิง Cell) ประกอบด้วย 3 คอลัมน์: Product, Region, Sales
.
SELECT Col1, Col3 = เลือกเฉพาะคอลัมน์ที่ 1 (Product) และ 3 (Sales)
WHERE Col3 > 40000 = กรองเฉพาะรายการที่ยอดขายมากกว่า 40,000
.
สังเกตว่าต้องใช้ Col1, Col2, Col3 แทน A, B, C เพราะข้อมูลมาจาก {} ไม่ใช่ Range ครับ 💡

### 2. ตัวอย่างที่ 2: GROUP BY และ Aggregate Functions - สรุปข้อมูลแบบกลุ่ม

```excel
=QUERY({"Region","Product","Sales";"North","iPhone",50000;"South","iPad",30000;"North","Mac",80000;"South","iPhone",45000;"North","iPad",25000}, "SELECT Col1, SUM(Col3), COUNT(Col2), AVG(Col3) GROUP BY Col1 LABEL SUM(Col3) 'ยอดรวม', COUNT(Col2) 'จำนวนรายการ', AVG(Col3) 'เฉลี่ย'", 1)
```

**ผลลัพธ์:** `Region | ยอดรวม | จำนวนรายการ | เฉลี่ย
North  | 155000 | 3           | 51666.67
South  | 75000  | 2           | 37500`

Query นี้รวมหลายเทคนิคสำคัญ:
.
1. SUM(Col3) = รวมยอดขายทั้งหมดของแต่ละภูมิภาค
2. COUNT(Col2) = นับจำนวนรายการสินค้าของแต่ละภูมิภาค
3. AVG(Col3) = หาค่าเฉลี่ยยอดขายของแต่ละภูมิภาค
4. GROUP BY Col1 = จัดกลุ่มตามภูมิภาค (คอลัมน์แรก)
5. LABEL = เปลี่ยนชื่อส่วนหัวเป็นภาษาไทยให้อ่านง่าย
.
ที่สำคัญคือทุกคอลัมน์ใน SELECT ที่ไม่ได้ใช้ Aggregate Function ต้องอยู่ใน GROUP BY ด้วย ไม่งั้นจะ Error ครับ 😎

### 3. ตัวอย่างที่ 3: PIVOT - สร้างตาราง Cross-tab แบบ Dynamic

```excel
=QUERY({"Month","Product","Sales";"Jan","iPhone",50000;"Jan","iPad",30000;"Feb","iPhone",55000;"Feb","iPad",35000;"Mar","iPhone",60000;"Mar","iPad",40000}, "SELECT Col1, SUM(Col3) GROUP BY Col1 PIVOT Col2", 1)
```

**ผลลัพธ์:** `Month | iPad  | iPhone
Jan   | 30000 | 50000
Feb   | 35000 | 55000
Mar   | 40000 | 60000`

PIVOT เป็นคำสั่งที่ทรงพลังมาก มันแปลงค่าในแถว (Product: iPhone, iPad) ให้กลายเป็นคอลัมน์ใหม่
.
SELECT Col1, SUM(Col3) = เลือกเดือนและยอดรวม
GROUP BY Col1 = จัดกลุ่มตามเดือน
PIVOT Col2 = แปลงค่าในคอลัมน์ Product ให้เป็นหัวคอลัมน์
.
ที่เจ๋งคือถ้าเพิ่มสินค้าใหม่ในข้อมูล คอลัมน์ใหม่จะสร้างขึ้นมาเองอัตโนมัติ ไม่ต้องแก้สูตร เหมาะสำหรับทำรายงานที่ข้อมูลเปลี่ยนแปลงบ่อยครับ ✨

### 4. ตัวอย่างที่ 4: Dynamic Query ด้วย Cell Reference

```excel
=QUERY(SalesData!A:D, "SELECT A, B, C, D WHERE B = '"&F1&"' AND D > "&G1&" ORDER BY D DESC LIMIT 10 LABEL A 'สินค้า', B 'ภูมิภาค', C 'วันที่', D 'ยอดขาย'", 1)
```

**ผลลัพธ์:** `Top 10 รายการขายในภูมิภาคที่เลือก (F1) ที่ยอดขายมากกว่าค่าที่ระบุ (G1) เรียงจากมากไปน้อย`

สูตรนี้สร้าง Dynamic Dashboard ที่ User เลือกเงื่อนไขจาก Dropdown ได้
.
สมมติ: F1 = 'North' (จาก Dropdown ภูมิภาค), G1 = 50000 (จาก Input ยอดขายขั้นต่ำ)
.
1. SalesData!A:D = ดึงข้อมูลจาก Sheet ชื่อ 'SalesData'
2. WHERE B = '"&F1&"' = กรองตามภูมิภาคที่เลือกใน F1 (สังเกต Single Quote รอบ Text)
3. AND D > "&G1 = กรองยอดขายมากกว่าค่าใน G1 (ไม่ต้องใส่ Quote เพราะเป็นตัวเลข)
4. ORDER BY D DESC LIMIT 10 = เรียงจากมากไปน้อยและแสดงแค่ 10 รายการแรก
.
ส่วนตัวผมใช้เทคนิคนี้บ่อยมากเพื่อทำ Interactive Report ที่ User กรองข้อมูลได้เองครับ 😎

## คำถามที่พบบ่อย

**Q: QUERY ต่างจาก FILTER อย่างไร? ควรใช้ตัวไหน?**

FILTER เหมาะกับการกรองข้อมูลแบบง่ายๆ ด้วยเงื่อนไข Boolean และคืนค่าทุกคอลัมน์ในข้อมูล
.
QUERY ทรงพลังกว่ามาก สามารถ:
- SELECT เฉพาะคอลัมน์ที่ต้องการ (ไม่ต้องเอาทั้งหมด)
- GROUP BY + Aggregate Functions (SUM, COUNT, AVG) เพื่อสรุปข้อมูล
- PIVOT เพื่อสร้าง Cross-tab แบบ Dynamic
- ORDER BY + LIMIT เพื่อเรียงและจำกัดจำนวน
- LABEL เพื่อเปลี่ยนชื่อหัวคอลัมน์
.
เอาจริงๆ ถ้าต้องการทำอะไรที่ซับซ้อนกว่าแค่กรอง ผมแนะนำให้ใช้ QUERY เลยครับ แต่ถ้าแค่กรองข้อมูลง่ายๆ FILTER เขียนง่ายกว่าและเร็วกว่า 💡

**Q: ทำไม QUERY ถึงแสดง Error "Unable to parse query string"?**

Error นี้เกิดจาก Syntax ผิด สาเหตุที่พบบ่อย:
.
1. ใช้ Double Quote ใน Text แทน Single Quote
   ❌ WHERE B = "North"
   ✅ WHERE B = 'North'
.
2. ตัวอักษรคอลัมน์เป็นตัวพิมพ์เล็ก
   ❌ select a, b from c
   ✅ SELECT A, B (Keywords ไม่ต้อง case-sensitive แต่คอลัมน์ต้องตัวใหญ่)
.
3. เขียน Clauses ผิดลำดับ
   ❌ WHERE... ORDER BY... GROUP BY...
   ✅ WHERE... GROUP BY... ORDER BY...
.
4. ใช้ A, B, C กับข้อมูลจาก {} แทนที่จะใช้ Col1, Col2, Col3
.
ลอง Debug ด้วยการลด Query ให้เหลือแค่ SELECT * ก่อน แล้วค่อยๆ เพิ่มทีละ Clause ครับ 😅

**Q: ทำไมต้องใช้ Col1, Col2 แทน A, B ในบางกรณี?**

เมื่อใช้ {} (Curly Braces) เพื่อสร้าง Array หรือรวมหลาย Range ข้อมูลจะไม่มีตัวอักษรคอลัมน์ (A, B, C) อีกต่อไป ต้องใช้ Col1, Col2, Col3 แทน
.
ตัวอย่าง:
=QUERY({Sheet1!A:B, Sheet2!A:B}, "SELECT Col1, Col3", 1)
- Col1 = คอลัมน์ A จาก Sheet1
- Col2 = คอลัมน์ B จาก Sheet1
- Col3 = คอลัมน์ A จาก Sheet2
- Col4 = คอลัมน์ B จาก Sheet2
.
แต่ถ้าใช้ Range ปกติ เช่น A1:D100 ให้ใช้ A, B, C, D ได้เลยครับ

**Q: QUERY รองรับการค้นหาด้วย Wildcard หรือ Pattern ไหม?**

รองรับครับ มีหลายวิธี:
.
1. contains - มีคำที่ระบุอยู่ในข้อความ
   WHERE A contains 'Apple'
.
2. starts with - ขึ้นต้นด้วยคำที่ระบุ
   WHERE A starts with 'P'
.
3. ends with - ลงท้ายด้วยคำที่ระบุ
   WHERE A ends with 'Ltd.'
.
4. like - ใช้ % แทนอักขระใดๆ และ _ แทน 1 ตัวอักษร
   WHERE A like '%Tech%' (มี Tech อยู่ตรงไหนก็ได้)
.
5. matches - ใช้ Regular Expression
   WHERE A matches '.*[0-9]+.*' (มีตัวเลขอยู่ในข้อความ)
.
ที่ต้องระวังคือทั้งหมดนี้ Case-sensitive นะครับ ถ้าต้องการ Case-insensitive ให้ใช้ lower() ครอบก่อน เช่น WHERE lower(A) contains 'apple' 💡

**Q: QUERY สามารถ JOIN ข้อมูลจาก 2 ตารางได้ไหม?**

QUERY ไม่รองรับ JOIN แบบ SQL โดยตรง (ไม่มีคำสั่ง JOIN, LEFT JOIN, INNER JOIN)
.
แต่สามารถรวมข้อมูลด้วย {} (Curly Braces) ได้:
- ใช้ ; (Semicolon) เพื่อรวมแนวตั้ง (เพิ่มแถว)
- ใช้ , (Comma) เพื่อรวมแนวนอน (เพิ่มคอลัมน์)
.
ตัวอย่างรวมแนวตั้ง:
=QUERY({Sheet1!A1:C10; Sheet2!A1:C10}, "SELECT Col1, Col2, Col3", 0)
.
ข้อควรระวัง: จำนวนคอลัมน์ต้องเท่ากัน และ Data Type ต้องตรงกัน
.
ถ้าต้องการ JOIN จริงๆ แบบ SQL ผมแนะนำให้ใช้ VLOOKUP, XLOOKUP หรือ INDEX/MATCH เพื่อดึงข้อมูลมาก่อน แล้วค่อย QUERY ผลลัพธ์ครับ 😅

**Q: QUERY ทำงานกับวันที่ (Date) อย่างไร?**

QUERY รองรับ Date ด้วย Syntax พิเศษ:
.
1. Date Literal - ต้องใช้ keyword date ตามด้วย 'yyyy-MM-dd'
   WHERE A = date '2024-01-15'
   WHERE A > date '2024-01-01' AND A < date '2024-12-31'
.
2. Date Functions - ดึงส่วนประกอบของวันที่
   year(A), month(A), day(A), dayOfWeek(A), quarter(A)
   WHERE year(A) = 2024 AND month(A) = 1
.
3. dateDiff - หาความต่างของวัน
   WHERE dateDiff(now(), A) < 30 (ภายใน 30 วันที่ผ่านมา)
.
4. FORMAT - จัดรูปแบบการแสดงผล
   FORMAT A 'dd MMM yyyy' (แสดงเป็น 15 Jan 2024)
.
ที่ต้องระวังคือรูปแบบ Date ต้องเป็น yyyy-MM-dd เสมอ ไม่ใช่ dd/MM/yyyy ครับ 💡

## ฟังก์ชันที่เกี่ยวข้อง

- [FILTER – กรองข้อมูลด้วยเงื่อนไข แสดงเฉพาะแถวที่ตรงเงื่อนไข](https://www.thepexcel.com/functions/google-sheets/filter/filter-google-sheets/)
- sort-google-sheets
- [ARRAYFORMULA – กระจายสูตรเดียวไปทั้งคอลัมน์แบบอัตโนมัติ](https://www.thepexcel.com/functions/google-sheets/google/arrayformula-google-sheets/)
- [IMPORTRANGE – ดึงข้อมูลข้ามไฟล์ Google Sheets แบบ Real-time](https://www.thepexcel.com/functions/google-sheets/web/importrange-google-sheets/)
- unique-google-sheets
- vlookup-google-sheets

## แหล่งข้อมูลเพิ่มเติม

- [Google Sheets Help: QUERY](https://support.google.com/docs/answer/3093343) _(Official Documentation)_
- [Google Visualization API Query Language Reference](https://developers.google.com/chart/interactive/docs/querylanguage) _(Official Documentation)_
- [Ben Collins: The Ultimate Guide to QUERY Function](https://www.benlcollins.com/spreadsheets/google-sheets-query-sql/) _(Tutorial)_
- [Coupler.io: QUERY Function Tutorial 2025](https://blog.coupler.io/google-sheets-query-function/) _(Tutorial)_

---

_Source: [https://www.thepexcel.com/functions/google-sheets/google/query-google-sheets/](https://www.thepexcel.com/functions/google-sheets/google/query-google-sheets/)_
