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])
=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 = มีหลายแถวส่วนหัว |
ใช้ WHERE เพื่อกรองข้อมูลด้วยเงื่อนไขหลายอย่างพร้อมกัน เช่น ยอดขายมากกว่า 10,000 บาท AND ภูมิภาคเป็น 'กรุงเทพ' หรือใช้ contains, starts with, matches สำหรับ Text
ใช้ ORDER BY เพื่อเรียงข้อมูล และ LIMIT เพื่อแสดงเฉพาะ Top N เช่น 10 อันดับสินค้าขายดีที่สุด หรือ 5 ลูกค้าที่ซื้อมากที่สุด
ใช้ GROUP BY ร่วมกับ Aggregate Functions (SUM, COUNT, AVG, MIN, MAX) เพื่อสรุปยอดรวมตามภูมิภาค สินค้า หรือช่วงเวลา
ใช้ PIVOT เพื่อแปลงค่าในแถวให้กลายเป็นคอลัมน์ใหม่ สร้างตาราง Cross-tabulation แบบ Dynamic โดยไม่ต้องใช้ Pivot Table
ใช้ {} เพื่อรวมข้อมูลจากหลาย Sheet หรือหลาย Range มา Query ในสูตรเดียว ช่วยสร้าง Dashboard ที่ดึงข้อมูลจากหลายแหล่ง
QUERY({"Product","Region","Sales";"iPhone","North",50000;"iPad","South",30000;"iPhone","South",45000;"Mac","North",80000}, "SELECT Col1, Col3 WHERE Col3 > 40000…=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
QUERY({"Region","Product","Sales";"North","iPhone",50000;"South","iPad",30000;"North","Mac",80000;"South","iPhone",45000;"North","iPad",25000}, "SELECT Col1, SU…=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({"Month","Product","Sales";"Jan","iPhone",50000;"Jan","iPad",30000;"Feb","iPhone",55000;"Feb","iPad",35000;"Mar","iPhone",60000;"Mar","iPad",40000}, "SELE…=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
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)=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) เรียงจากมากไปน้อย
FILTER เหมาะกับการกรองข้อมูลแบบง่ายๆ ด้วยเงื่อนไข Boolean และคืนค่าทุกคอลัมน์ในข้อมูล
.
QUERY ทรงพลังกว่ามาก สามารถ:
– SELECT เฉพาะคอลัมน์ที่ต้องการ (ไม่ต้องเอาทั้งหมด)
– GROUP BY + Aggregate Functions (SUM, COUNT, AVG) เพื่อสรุปข้อมูล
– PIVOT เพื่อสร้าง Cross-tab แบบ Dynamic
– ORDER BY + LIMIT เพื่อเรียงและจำกัดจำนวน
– LABEL เพื่อเปลี่ยนชื่อหัวคอลัมน์
.
เอาจริงๆ ถ้าต้องการทำอะไรที่ซับซ้อนกว่าแค่กรอง ผมแนะนำให้ใช้ QUERY เลยครับ แต่ถ้าแค่กรองข้อมูลง่ายๆ FILTER เขียนง่ายกว่าและเร็วกว่า 💡
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 ครับ 😅
เมื่อใช้ {} (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 ได้เลยครับ
รองรับครับ มีหลายวิธี:
.
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 แบบ 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 ด้วย 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 ครับ 💡
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 นะครับ 😎