Thep Excel

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

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 ที่ซับซ้อน

=QUERY(data, query, [headers])

By ThepExcel AI Agent
20 December 2025

Function Metrics


Popularity
10/10

Difficulty
7/10

Usefulness
10/10

Syntax & Arguments

=QUERY(data, query, [headers])

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

How it works

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

ใช้ 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 ที่ดึงข้อมูลจากหลายแหล่ง

Examples

ตัวอย่างที่ 1: SELECT และ WHERE – เลือกคอลัมน์และกรองข้อมูล
QUERY({"Product","Region","Sales";"iPhone","North",50000;"iPad","South",30000;"iPhone","South",45000;"Mac","North",80000}, "SELECT Col1, Col3 WHERE Col3 > 40000…
สูตรนี้สร้าง 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 ครับ 💡
Google Sheets Formula:

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

Result:

Product | Sales
iPhone | 50000
iPhone | 45000
Mac | 80000

ตัวอย่างที่ 2: GROUP BY และ Aggregate Functions – สรุปข้อมูลแบบกลุ่ม
QUERY({"Region","Product","Sales";"North","iPhone",50000;"South","iPad",30000;"North","Mac",80000;"South","iPhone",45000;"North","iPad",25000}, "SELECT Col1, SU…
Query นี้รวมหลายเทคนิคสำคัญ:
.
1. SUM(Col3) = รวมยอดขายทั้งหมดของแต่ละภูมิภาค
2. COUNT(Col2) = นับจำนวนรายการสินค้าของแต่ละภูมิภาค
3. AVG(Col3) = หาค่าเฉลี่ยยอดขายของแต่ละภูมิภาค
4. GROUP BY Col1 = จัดกลุ่มตามภูมิภาค (คอลัมน์แรก)
5. LABEL = เปลี่ยนชื่อส่วนหัวเป็นภาษาไทยให้อ่านง่าย
.
ที่สำคัญคือทุกคอลัมน์ใน SELECT ที่ไม่ได้ใช้ Aggregate Function ต้องอยู่ใน GROUP BY ด้วย ไม่งั้นจะ Error ครับ 😎
Google Sheets Formula:

=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)

Result:

Region | ยอดรวม | จำนวนรายการ | เฉลี่ย
North | 155000 | 3 | 51666.67
South | 75000 | 2 | 37500

ตัวอย่างที่ 3: PIVOT – สร้างตาราง Cross-tab แบบ Dynamic
QUERY({"Month","Product","Sales";"Jan","iPhone",50000;"Jan","iPad",30000;"Feb","iPhone",55000;"Feb","iPad",35000;"Mar","iPhone",60000;"Mar","iPad",40000}, "SELE…
PIVOT เป็นคำสั่งที่ทรงพลังมาก มันแปลงค่าในแถว (Product: iPhone, iPad) ให้กลายเป็นคอลัมน์ใหม่
.
SELECT Col1, SUM(Col3) = เลือกเดือนและยอดรวม
GROUP BY Col1 = จัดกลุ่มตามเดือน
PIVOT Col2 = แปลงค่าในคอลัมน์ Product ให้เป็นหัวคอลัมน์
.
ที่เจ๋งคือถ้าเพิ่มสินค้าใหม่ในข้อมูล คอลัมน์ใหม่จะสร้างขึ้นมาเองอัตโนมัติ ไม่ต้องแก้สูตร เหมาะสำหรับทำรายงานที่ข้อมูลเปลี่ยนแปลงบ่อยครับ ✨
Google Sheets Formula:

=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)

Result:

Month | iPad | iPhone
Jan | 30000 | 50000
Feb | 35000 | 55000
Mar | 40000 | 60000

ตัวอย่างที่ 4: Dynamic Query ด้วย Cell Reference
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)
สูตรนี้สร้าง 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 กรองข้อมูลได้เองครับ 😎
Google Sheets Formula:

=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)

Result:

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

FAQs

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

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

ทำไม 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 ครับ 😅

ทำไมต้องใช้ 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 ได้เลยครับ

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’ 💡

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 ผลลัพธ์ครับ 😅

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 ครับ 💡

Resources & Related

Additional Notes

QUERY เป็นฟังก์ชันพิเศษที่มีเฉพาะใน Google Sheets ใช้ภาษา Google Visualization API Query Language (คล้าย SQL) ในการค้นหา กรอง จัดเรียง และสรุปข้อมูลจาก Range ที่กำหนด
.
ที่เจ๋งที่สุดคือคุณสามารถใช้คำสั่ง SELECT, WHERE, GROUP BY, PIVOT, ORDER BY, LIMIT, OFFSET, LABEL, FORMAT ได้เหมือนเขียน SQL จริงๆ ทำให้ทำงานที่ซับซ้อนได้ด้วยสูตรเดียว ไม่ต้องใช้หลายฟังก์ชันร่วมกัน
.
ส่วนตัวผมคิดว่า QUERY เป็นฟังก์ชันที่ทรงพลังที่สุดใน Google Sheets เลย ถ้าใช้เป็นจะทำ Dashboard หรือรายงานแบบ Dynamic ได้สวยมาก และมันไม่มีใน Excel นะครับ 😎

Leave a Reply

Your email address will not be published. Required fields are marked *