เราเขียน SQL บน Google Sheet ได้ป่าวพี่ทอย ?
เดี๋ยวพี่จะเล่าให้ฟังๆ
Google Sheet เป็น Tools ที่หลาย ๆ คนน่าจะเคยใช้กันมาบ้างแล้ว ด้วยความสะดวกสบายของ Google Sheet ทำให้เราสามารถแก้ไข ข้อมูลแบบ Speardsheet ได้อย่างรวดเร็ว ทำงานพร้อมกันกับเพื่อนร่วมงาน และสามารถย้อนเวอร์ชั่นของงานได้ รวมถึงสามารถจัดการข้อมูลขนาดเล็ก - กลางได้สบาย ถึง 10,000,000 cells
วันนี้ผมจะมาแนะนำวิธีการทำงานบน Google Sheet อีกหนึ่งวิธีที่มีการใช้งานกันภายในทีมบ่อย และมีประสิทธิภาพค่อนข้างสูง สำหรับงานที่ต้องการเห็นข้อมูลอัพเดททุกวัน และงานที่ต้องจัดการกับ Data ด้วยภาษา SQL ขั้นพื้นฐาน ใครมีพื้นฐานเรื่องการ Query มาก่อนฟังแล้วเก็ทแน่นอน แต่ถ้าไม่เคยเรียน แน่นอนว่าคุณจะได้เรียนมันวันนี้ครับ
หากต้องการรู้เกี่ยวกับ SQL คุณสามารถกดอ่านได้เลย คลิกที่นี่
การเริ่มต้นใช้งาน Google Sheet สามารถทำได้ 2 วิธีหลัก โดยวิธีแรกจะใช้การเปิดผ่านหน้า UI ของ Google Sheet แล้วกดสร้างชีทใหม่ได้เลย ส่วนอีกวิธีที่จะแนะนำนั้นง่ายกว่ามากๆ คือการพิมพ์คำสั่ง Sheet.new ลงในช่อง URL แล้วกด Enter ในกรณีที่มี Account ของ Google อยู่แล้วข้อมูลชีทใหม่หากมีการแก้ไข จะถูกบันทึกลงในไดรฟ์ของเราอัตโนมัติ
คำสั่งพื้นฐานที่เราสามารถใช้ได้บน Google Sheet ในการเขียน Query ข้อมูล จะไม่ได้สามารถใช้ window function ตัวอื่น ๆ นอกเหนือจากการทำ Aggregate data เช่น COUNT(), SUM() , MAX() , MIN() และ AVG() เป็นต้น ไม่สามารถใช้ DISTINCT , IN , BETWEEN , WITH รวมถึงยังไม่สามารถใช้การ Join ทุกรูปแบบได้ (การเชื่อมข้อมูลใน Google Sheet มีหลายทางเลือกเลย Index match, Xloopup , Vlookup ให้เลือกใช้ ไปใช้ตรงนู้น )
* สำหรับข้อมูลที่เขียน Query ยังสามารถใช้การเชื่อม Text เพื่อทำเป็น Dynamic Query ได้เช่นกัน
คำสั่งพื้นฐานของการ Query จะมีความแตกต่างการภาษา SQL ทั่วไปเล็กน้อย โดยจะใช้ function Query() ในการเลือกช่วงของข้อมูลมาก่อน แล้วหลังจากนั้นเราจะเขียน SELECT Statement ปกติ โดยละเว้นการใช้ FROM .. เนื่องจากเรากำหนด Range ไว้แล้วใน data ตามที่แสดงผลใน syntax ตามภาพด้านบน
โครงสร้างของคำสั่ง Query นั้นมี่เพียงการรับค่า parameter ทั้งหมด 3 ตัว ได้แก่ data (required) , query (required) และ header(optional) ซึ่งจะอธิบายการทำงานแยกกันเป็นส่วนตามนี้
data (required) คือช่วงของข้อมูลบน Google Sheet ที่เราต้องการเลือกมาทำการ Query เช่น A1:D คือการเลือกช่วงข้อมูลตั้งแต่ A1 ไปจนถึง แถวสุดท้ายของ Column D แนะนำให้เลือกแบบนี้ เนื่องจากเวลาที่มีข้อมูลมาเพิ่ม คำสั่ง Query จะทำให้เราแบบอัตโนมัติโดยที่เราไม่ต้องเลือกใหม่
query (required) คือ คำสั่งที่ใช้ในการค้นหาข้อมูล สามารถเขียนแบบ SELECT A, B ,C ซึ่งการเขียนจะมีการละเว้น FROM เพราะ Google Sheet ได้เลือก data ในหัวข้อที่แล้วเป็น FROM data ให้เราแบบอัตโนมัติ โดยที่ A,B,C จะเป็น Cell Header ที่เราทำการเลือก Column ที่ต้องการ ในกรณีที่ใช้คำสั่ง Query ร่วมกับ Importrange เราจะใช้เป็น Col1 , Col2 ... แทนการเลือก Column แทน
header (optional) คือ คำสั่งที่ใช้ในกรณีที่ ตารางของเรามีชื่อ คอลัมน์ 2 แถว เช่น CEO , Name ในกรณีที่ใส่เลข 1 จะแสดงผล header เฉพาะ CEO แต่หากใส่เป็น 2 จะได้ผลลัพธ์เป็น CEO Name
คำสั่ง Where clause จะใส่หลังจากคำสั่ง SELECT โดยจะใช้ได้ค่อนข้างจำกัด เช่น Col1 <> 'abc' , Col1 is not null และสามารถใช้ AND และ OR ในการเชื่อม 2 เงื่อนไขได้ แทนที่บางคำสั่งที่ไม่สามารถใช้ได้ เช่น Between , In , like และ การใช้ Operation ที่เกี่ยวกับตัวอักษร ควรจะใช้ Single Quote เสมอ
การใช้ Aggregate Function เช่น การรวม (Sum) จะเป็นการรวมแถวของข้อมูลทำให้ออกมาเป็นตัวเลข แยกตามคอลัมน์อื่น ๆ ที่มีความแตกต่างกัน ตัวอย่างแสดงให้เห็นว่า มีข้อมูลของ Toy ทั้งหมด 2 แถว เมื่อรวมกันก็จะได้เป็น Toy 1 แถว โดยที่ช่อง Revenue จะถูกแสดงผลโดยรวมของแถวที่ 1 และ 2
กรณีที่มีการเรียกใช้คำสั่ง Group by จะเกิดขึ้นต่อเมื่อมีการใช้ Aggregate function เช่น sum , max ,min และ avg เป็นต้น โดยจะเขียนไว้ด้านหลัง Where clause และ ก่อน Order by เสมอ ตัวอย่างเช่น SELECT B, Sum(D) WHERE B is not null GROUP BY B กล่าวสั้นๆ ก็คือเมื่อเราเลือกใช้ Aggregate function ตัวไหน ตัวนั้นเราจะไม่ใส่ลงใน GROUP BY นั่นเอง
คำสั่ง Order by ช่วยในการจัดลำดับข้อมูลจากน้อยไปมาก (Default) ซึ่งจะอยู่หลังคำสั่ง Group by หากมีการใช้งาน Aggregate function เราจะสามารถใช้คำสั่ง order by Col1 desc เพื่อจัดลำดับให้เรียงตัวเลข-ตัวอักษร จาก Col1 จากมากไปน้อย และ desc คือ descending นั่นเอง แต่ถ้าคุณไม่ต้องการเรียงลำดับ ไม่จำเป็นต้องเขียนก็ได้
ปกติแล้ว การใช้คำสั่ง Alias หรือแปลงชื่อ Columns ,table ทั่วไปใน SQL เราจะเขียนหลังจาก SELECT Column หรือจาก FROM TABLE ด้วยการพิมพ์ต่อท้ายเป็น as ชื่อคอลัมน์ และสามารถพิมพ์ชื่อ ไปหลังตัวแปรได้เลย เช่น SELECT Col1 as Name , Col2 Company ก็จะได้ชื่อคอลัมน์แรกเป็น Name และ คอลัมน์ที่ 2 เป็น Company ทำได้ทั้งสองวิธี
แบบเดียวกันกับ FROM ที่กล่าวไป คือ Google นั้นจัดการ Query แต่ละส่วนให้เราอยู่แล้ว เราจึงเปลี่ยนไปใช้ label Col1'ชื่อที่ต้องการเปลี่ยน'
ในกรณีที่ต้องการเปลี่ยนค่ามากกว่า 1 ตัว สามารถใช้เป็น
label Col1'ชื่อที่ต้องการเปลี่ยน 1' ,Col2 'ชื่อที่ต้องการเปลี่ยน 2' ได้เลย โดยไม่ต้องพิมพ์ label อีกครั้ง
หากคุณได้ใช้ GROUP BY ตามหัวข้อที่ 4 แล้ว ชื่อที่แสดงผลใน Google Sheet ก็จะเป็น Col1, Col2 และ sum(Col1) ตามลำดับ มันก็คงจะอ่านและตีความคอลัมน์ยากใช่ไหม ดังนั้นเราจึงจะใช้ Label แทนการเปลี่ยนชื่อ คอลัมน์เหล่านั้น โดยจะเขียนในส่วนท้ายสุดเสมอ label Col1 'Name' , Col2 'Department' , sum(Col3) 'Workday' เพียงเท่านี้ข้อมูลของเราก็พร้อมให้คนอื่นได้เอาไปใช้งานต่อแล้ว
คำสั่ง Pivot จะใช้สำหรับการนำ rows ที่เราต้องการไปแสดงผลแบบเป็น Column โดยจะต้องมี Aggregate function อย่างน้อย 1 ตัวเสมอ โดยคอลัมน์ที่เราต้องการนำไป Pivot จะไม่อยู่ใน SELECT ตามตัวอย่างที่แสดงผลไว้
ตัวอย่างแสดงให้เห็นว่า Column ที่เราต้องการนำไป Pivot ที่จะอยู่ในคำสั่ง pivot ท้ายสุด ส่วนคำสั่ง SELECT จะมีแค่ A และ Sum(D) เท่านั้น
ใช้คำสั่ง Importhtml ในการดึงข้อมูลจากเว็บที่เราต้องการออกมา จะได้ตัวอย่างตามภาพ โดยที่ข้อมูลจะมีหน้าตาเหมือนกับเว็บไซต์ที่เราดึงมาเลย
สร้าง Dropdown List จากคอลัมน์ Team ที่ดึงมาจากขั้นตอนแรก อาจจะใส่สีเพื่อความสวยงาม และให้เลือกใช้ได้ง่าย ๆ
เขียนคำสั่ง Query โดยใช้การเชื่อม Text ด้วย & สำหรับการใส่เงื่อนไขเพิ่มเติม ในกรณีนี้เราต้องการเลือกทีม 2 ทีมมาดูเทียบตารางคะแนนกัน เราสามารถใช้เงื่อนไข OR ในการฟิลเตอร์ได้ง่าย ๆ
ลองฟิลเตอร์ดูข้อมูลระหว่างทีม Liverpool กับ Manchester United ก็จะได้ผลลัพธ์ออกมาหน้าตาประมาณนี้ เราสามารถประยุกต์ใช้กับโปรเจคอื่น ๆ ที่สอดคล้องกับงานของเราได้
สามารถดูตัวอย่างวิธีการ Query โดยการ Make a copy ไปได้เลย คลิกที่นี่
การเขียน Query บน Google Sheet ช่วยลดเวลาในการทำงานด้วย function ปกติ ที่ต้องเขียนหลายๆ function เพื่อจัดการให้ข้อมูลอยู่รูปแบบที่ต้องการได้ และสามารถทำเป็น dynamic query หรือสร้างเป็น application ง่าย ๆ สำหรับให้คนในทีมใช้งานได้แบบสบาย ๆ เลย
Share your experience with this Blog