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 ที่ซับซ้อน
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| data | Range/Array | ช่วงข้อมูลที่ต้องการ Query เช่น A1:F100 หรือ Sheet2!A:F สามารถใช้ข้อมูลจาก Sheet อื่นหรือรวมหลาย Range ด้วย {} ได้ ถ้าใช้ {} ต้องเปลี่ยนจาก A, B, C เป็น Col1, Col2, Col3 แทน |
|
| query | 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]ไม่บังคับ | Number | -1 | จำนวนแถวส่วนหัว (Header) ในข้อมูลต้นฉบับ -1 = Google Sheets จะเดาเอง (ไม่แนะนำ อาจผิดพลาด) 0 = ไม่มีแถวส่วนหัว 1 = มี 1 แถวส่วนหัว (แนะนำให้ระบุชัดเจน) มากกว่า 1 = มีหลายแถวส่วนหัว |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
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 นะครับ 😎
ใช้ 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 ที่ดึงข้อมูลจากหลายแหล่ง
สูตรนี้สร้าง 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 ครับ 💡
Query นี้รวมหลายเทคนิคสำคัญ:
1. SUM(Col3) = รวมยอดขายทั้งหมดของแต่ละภูมิภาค
2. COUNT(Col2) = นับจำนวนรายการสินค้าของแต่ละภูมิภาค
3. AVG(Col3) = หาค่าเฉลี่ยยอดขายของแต่ละภูมิภาค
4. GROUP BY Col1 = จัดกลุ่มตามภูมิภาค (คอลัมน์แรก)
5. LABEL = เปลี่ยนชื่อส่วนหัวเป็นภาษาไทยให้อ่านง่าย
ที่สำคัญคือทุกคอลัมน์ใน SELECT ที่ไม่ได้ใช้ Aggregate Function ต้องอยู่ใน GROUP BY ด้วย ไม่งั้นจะ Error ครับ 😎
PIVOT เป็นคำสั่งที่ทรงพลังมาก มันแปลงค่าในแถว (Product: iPhone, iPad) ให้กลายเป็นคอลัมน์ใหม่
SELECT Col1, SUM(Col3) = เลือกเดือนและยอดรวม
GROUP BY Col1 = จัดกลุ่มตามเดือน
PIVOT Col2 = แปลงค่าในคอลัมน์ Product ให้เป็นหัวคอลัมน์
ที่เจ๋งคือถ้าเพิ่มสินค้าใหม่ในข้อมูล คอลัมน์ใหม่จะสร้างขึ้นมาเองอัตโนมัติ ไม่ต้องแก้สูตร เหมาะสำหรับทำรายงานที่ข้อมูลเปลี่ยนแปลงบ่อยครับ ✨
สูตรนี้สร้าง 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 กรองข้อมูลได้เองครับ 😎
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 จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
ARRAYFORMULA กระจายผลลัพธ์จากสูตรเดียวออกเป็นหลายแถวหรือหลายคอลัมน์พร้อมกัน โดยไม่ต้องลากสูตร ช่วยประหยัดเวลา ลดข้อผิดพลาด และอัปเดตอัตโนมัติเมื่อมีข้อมูลใหม่ ทำให้ชีททำงานเร็วขึ้นเพราะลดจำนวนสูตรจากหลายพันเหลือแค่หนึ่ง
GOOGLEFINANCE ช่วยดึงข้อมูลหุ้น กองทุน และค่าเงินจาก Google Finance มาแสดงในตารางได้ทันที รองรับทั้งราคาปัจจุบัน (Real-time, ดีเลย์ 20 นาที) และราคาย้อนหลัง (Historical Data) สามารถดึงค่าอื่นๆ เช่น P/E, Market Cap หรือปริมาณการซื้อขายได้ด้วย
SPARKLINE สร้างกราฟเส้น กราฟแท่ง หรือกราฟ Win/Loss ขนาดจิ๋วภายในเซลล์เดียว เหมาะสำหรับสร้าง Dashboard ที่ต้องการแสดงแนวโน้มข้อมูลหลายๆ รายการในพื้นที่จำกัด (In-cell chart)
FILTER กรองข้อมูลจาก Range แล้วแสดงเฉพาะแถว/คอลัมน์ที่ตรงเงื่อนไข รองรับหลายเงื่อนไข (AND/OR) และอัปเดตผลลัพธ์แบบ Real-time เมื่อข้อมูลต้นทางเปลี่ยน ทำให้เหมาะกับการสร้างรายงานไดนามิก
FLATTEN รวมข้อมูลจากหนึ่งหรือหลายช่วงเข้าด้วยกันเป็นคอลัมน์เดียว โดยเรียงลำดับแถวก่อน (Row-major order) ช่วงข้อมูลไม่จำเป็นต้องมีขนาดเดียวกัน และสามารถผสมเซลล์ เรนจ์ และค่าคงที่ได้
IMPORTRANGE ดึงข้อมูลจาก Google Sheets ไฟล์อื่นมาแสดงแบบ Real-time โดยใช้ URL หรือ Spreadsheet ID ข้อมูลจะ sync ตามต้นฉบับอัตโนมัติทุก 30 นาที (หรือเร็วกว่า) ต้อง Allow Access ครั้งแรกที่เชื่อมต่อระหว่างไฟล์คู่ใดๆ หลังจากนั้น Editor ทุกคนในไฟล์ปลายทางสามารถใช้ IMPORTRANGE จากไฟล์ต้นทางนั้นได้เลย ข้อมูลที่ดึงมาเป็น Read-only เหมาะสำหรับการรวมศูนย์ข้อมูล สร้าง Dashboard และแชร์ข้อมูลบางส่วนโดยไม่ต้องเปิดเผยไฟล์ต้นฉบับทั้งหมด
REGEXMATCH เป็นฟังก์ชันสำหรับตรวจสอบว่าข้อความตรงกับรูปแบบ Regular Expression หรือไม่ คืนค่า TRUE หรือ FALSE เหมาะสำหรับ Data Validation และ Filtering ขั้นสูง
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่