SQL พื้นฐานสำหรับ Data Analyst

สำหรับคนที่มีพื้นฐานหรือเคยใช้งาน SQL มาบ้างแล้ว จะรู้จักคำสั่ง SQL พื้นฐานต่างๆ มีบางส่วนที่ไม่ค่อยใช้งานมัน แต่มันมีประโยชน์อย่างยิ่งโดยเฉพาะสำหรับ Data Analyst เช่น Distinct ในบางครั้ง ถ้าต้องการ Records ของข้อมูลที่ไม่ซ้ำกัน สามารถใช้ Distinct มาช่วยเพื่อให้ได้ข้อมูลที่ไม่ซ้ำกัน โดยใช้งานกับ Columns IN IN Operator ช่วยให้สามารถทดสอบได้ว่า Expression นั้นตรงกับ Value ใด ๆ ใน List ที่ระบุหรือไม่ มันจะช่วยลดการใช้งาน “OR” หลาย ๆ เงื่อนไข Having มันเป็นการใช้เงื่อนไขกับกลุ่มของผลลัพธ์เพื่อกรองข้อมูลออกมา แต่คำถามที่น่าสนใจก็คือ ทำไมถึงไม่ใช้ “WHERE” ที่หลาย ๆ คนคุ้นเคยกันล่ะ แน่นอนว่าเราใช้ “WHERE” เพื่อระบุเงื่อนไขให้กับ Columns ที่เราเลือก ในขณะที่ “HAVING” จะถูกใช้เพื่อระบุเงื่อนไขให้กับ Groups ที่ถูกสร้างขึ้นโดย “GROUP BY” Clause “HAVING” Clause จะต้องถูกใช้ตามหลัง “GROUP BY” Clause แต่จะอยู่ก่อน “ORDER BY” Clause ในตัวอย่างด้านล่างนี้ SQL HAVING Clause จะ Filter ผลลัพธ์เฉพาะ คณะที่มีจำนวน นักศึกษา มากกว่า 500 คน เท่านั้น LIMIT “LIMIT” ถูกใช้เพื่อจำกัดหรือกำหนดจำนวนของผลลัพธ์ตามจำนวนที่แน่นอน เนื่องจากในบางครั้งก็จำเป็นต้องจำกัดจำนวนของผลลัพธ์ของการ Query Wild Cards โดยทั่วไปแล้ว Wild Card เป็นวิธีในการค้นหาตัว Characters ผ่าน Strings ซึ่ง Wild Card ใช้ “LIKE” Operator โดย Wild Card ที่เป็นที่รู้จักและถูกใช้งานกันมากที่สุด ก็คือ “%” และ “_” “%” : หมายถึง ศูนย์หรือมากกว่าหนึ่ง Character ในตัวอย่างด้านล่าง เรากำลังบอก SQL ให้ดึงข้อมูลจาก Table “student” ที่ใน Column “name” เริ่มต้นด้วยตัวอักษร “w” แล้วตามต่อด้วยตัวอักษรอะไรก็ได้และมีจำนวนกี่ตัวก็ได้ อีกตัวอย่างหนึ่ง ซึ่งเรากำลังบอก SQL ให้ดึงข้อมูลจาก Table “student” ที่ใน Column “name” ลงท้ายด้วยตัวอักษร “wan” และสามารถเริ่มต้นด้วยตัวอักษรอะไรก็ได้และมีจำนวนกี่ตัวก็ได้ “_” : หมายถึง Character เพียงตัวเดียวเท่านั้น ใน Query ด้านล่าง จะทำการดึงข้อมูลที่เริ่มต้นด้วยตัวอักษรอะไรก็ได้ 1 ตัว แล้วตามด้วยตัวอักษรต่าง ๆ ตามรูปแบบ  “_ilaiwan” หรีอต้องการดึงผลลัพ์ธ์จาก Column “name” ที่เริ่มต้นด้วย “wilaiwa” แล้วตามด้วยตัวอักษรอะไรก็ได้อีก 1 ตัว  และสามารถใช้งานด้วยการรวมทั้ง 2 อย่างเข้าด้วยกันเพื่อการกำหนดผลลัพธ์ที่เจาะจงมากขึ้น เช่น ดึงข้อมูลจาก Column “email” ที่ขึ้นต้นด้วยจำนวนตัวอักษรกี่ตัวก็ได้ และลงท้ายด้วยอักษรเพียงตัวเดียว อ้างอิง : https://www.techstarthailand.com/blog/detail/SQL-Beyond-The-Basics/1296

Read More »

สนุกๆ กับการกำหนดรูปแบบให้กับ Column ของ SharePoint List : Choice/Text Column

Blog นี้เราจะมากำหนดรูปแบบการแสดงผล Column ของ SharePoint List กันนะคะ ซึ่งทำได้ง่าย ๆ สบาย ๆ อีกแล้วค่า โดยการกำหนดรูปแบบให้กับ Column ของ SharePoint List นั้น จะใช้  JSON text format นะคะ ไม่รู้จัก JSON มาก่อนจะทำได้หรือป่าว ? ได้สิคะ เพราะมีตัวอย่าง JSON ที่เราสามารถหยิบเอามาใช้และแก้ไขให้ตรงกันกับข้อมูลของเราได้ โดยที่ไม่ต้องเข้าใจ JSON ให้มากมายก็ได้ เหมือนกับผู้เขียน (แฮ่ ๆ) ถึงได้บอกไงละคะว่า ง่าย ๆ สบาย ๆ อีกแล้ว ส่วนใครที่เข้าใจและใช้ JSON อยู่แล้ว ก็ไม่ต้องพูดมากให้เจ็บคอ สบายบรื๋อออ แน่นอน Blog นี้ ผู้เขียนขอรวบรวมเอาการกำหนดรูปแบบให้กับ Column ที่มีชนิดฟิลด์ข้อมูลเป็น Choice หรือ Text กันก่อนนะคะ Column formatting เป็นการกำหนดรูปแบบของ Column ไม่ได้มีผลกับข้อมูลใน Column นะคะ Let’s Play – ก่อนอื่นไปที่ Column ของ List ที่เราต้องการจัดรูปแบบ แล้วคลิกหัวของ column นั้น แล้วเลือกเมนู “Column Settings” และเลือก “Formatting this column” ดังรูป อย่างตัวอย่าง ผู้เขียนอยากจัดรูปแบบของ column สถานะ ส่วนของ Format columns Panel ก็จะโผล่ขึ้นมา ดังรูป เอา JSON มาวาง แก้ไขตามข้อมูลของเรา แล้ว บันทึก (Save) เท่านี้ก็เป็นอันเสร็จ สมหวังดั่งตั้งใจ มาลองทำกันซัก 2 ตัวอย่างนะคะ ตัวอย่างแรก สีจะมาจาก Class ส่วน ICON เปลี่ยนได้ ก็หยิบมาใช้ได้จากที่นี้นะคะ Fluent UI Icons {“$schema”: “https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json”,”elmType”: “div”,”attributes”: {“class”: “=if(@currentField == ‘เสร็จสิ้น’, ‘sp-field-severity–good’, if(@currentField == ‘รอดำเนินการ’, ‘sp-field-severity–low’, if(@currentField == ‘ดำเนินการแล้วรอทดสอบ’, ‘sp-field-severity–warning’, if(@currentField == ‘รอเปิดโครงการ’, ‘sp-field-severity–severeWarning’, ‘sp-field-severity–blocked’)))) + ‘ ms-fontColor-neutralSecondary'”},”children”: [{“elmType”: “span”,”style”: {“display”: “inline-block”,”padding”: “0 2px”},”attributes”: {“iconName”: “=if(@currentField == ‘เสร็จสิ้น’, ‘CheckMark’, if(@currentField == ‘รอดำเนินการ’, ‘Forward’, if(@currentField == ‘ดำเนินการแล้วรอทดสอบ’, ‘Error’, if(@currentField == ‘รอเปิดโครงการ’, ‘Warning’, ‘ErrorBadge’))))”}},{“elmType”: “span”,”txtContent”: “@currentField”}]} มากันที่ตัวอย่างที่ 2 JSON ตามด้านล่าง ตัวอย่างนี้สำหรับใครอยากเปลี่ยนสี ก็แก้ไขโค้ดสีกันได้เลยค่ะ ส่วนใครอยากจะใช้ ICON อื่น ก็หยิบมาใช้ได้จากที่นี้ Fluent UI Icons เช่นเดิมนะคะ {“elmType”: “div”,”style”: {“background-color”: “=if(@currentField == ‘ดีมาก’, ‘#7ed9a1’, if(@currentField == ‘ดี’,’#eded6b’, ‘#f27ce0’))”,”color”: “#0d0101″,”white-space”: “nowrap”},”children”: [{“elmType”: “span”,”txtContent”: “@currentField”,”style”: {“font-size”: “1em”,”display”: “inline-block”,”padding”: “0

Read More »

การตั้งค่า TeamViewer ให้ Remote ด้วย IP Address

การตั้งค่า TeamViewer ให้ remote ด้วย IP Address จะช่วยให้เราจดจำ ID ได้ง่ายขึ้น และ ไม่จำเป็นต้อง remote ผ่าน Internet แต่ต้องเป็นเครื่องที่อยู่ใน network เดียวกัน มีวิธีการตั้งค่าดังนี้ เปิดโปรแกรม TeamViewer แล้วกดที่เมนู Extras 2 กดที่ Options 3. ที่ Incoming LAN connections ให้เลือกเป็น accept หรือ accept exclusively accept จะสามารถใช้ได้ทั้ง LAN และ Internet accept exclusively ใช้ได้แค่ LAN เท่านั้น เสร็จแล้วให้กดปุ่ม OK ถ้าเลือกเป็น accept ตรง Your ID จะแสดงเป็นตัวเลขแบบปกติ ซึ่งจะ remote โดยใช้ตัวเลข Your ID ก็ได้ หรือจะ remote ด้วย IP Address ก็ได้ถ้าอยู่ใน network เดียวกัน ถ้าเลือกเป็น accept exclusively ตรง Your ID จะแสดงเป็นเลข IP Address ซึ่งจะ remote โดยใช้ IP Address ได้อย่างเดียวเท่านั้นและต้องอยู่ใน network เดียวกันด้วย

Read More »

อ่านข้อมูลจาก google sheet ด้วย API Service

เมื่อมีการเก็บข้อมูลแบบสอบถาม ใน google form แล้วต้องการเอาข้อมูลจาก google sheet เพื่อมาตรวจสอบว่านักศึกษาหรือคนที่กรอกแบบสอบถามนั้น ได้ตอบแบบสอบถามไปรึยัง เพื่อนำมาตรวจสอบต่อกับเว็บไซต์หรือระบบของเราที่พัฒนาเอง เช่นนักศึกษาคนนี้กรอกแบบสอบถามรึยัง ถ้ากรอกแล้วจะสามารถดำเนินการต่อในระบบได้ ถ้ายังไม่กรอกต้องไปยังแบบสอบถามก่อน ขั้นแรก ต้องเปิดช่องทางการเข้าถึง Google sheet และกำหนดสิทธิ์ให้ Application ที่เราต้องการเข้าถึงข้อมูลนั้น ๆ ก่อน ไปยังลิงค์  https://console.developers.google.com/ และไปที่ปุ่มรูป Hamberger –> IAM & Admin –> Manage Resources จากนั้นจะแสดงหน้าจัดการ Resources ให้คลิกเมนู CREATE PROJECT จะแสดงดังรูป ตั้งชื่อ Project และคลิกปุ่ม CTREATE เมื่อสร้างแล้วจะแสดงดังรูป จากนั้นไปที่ ปุ่มรูป Hamberger –> APIs & Services –> Dashboard จะแสดงหน้า Dashboard ดังรูป ให้เลือกเมนู Credentials แล้วคลิกเมนู CREATE CREDENTIALS –> Service account สร้างเสร็จแล้วจะแสดงดังรูป จากนั้นคลิกแก้ไข จากนั้นคลิก ADD KEY –> Create new key จะเป็นการให้สิทธิ์การเข้าถึงให้กับผู้ใช้ กดปุ่ม CREATE จากนั้นแก้ไขไฟล์ JSON ที่โหลดมาให้เป็นชื่อ credentials.json และเปิดไฟล์ดังกล่าว copy ส่วนของ client_email ไว้ และนำไป set ให้เข้าถึง google sheet ที่เราต้องการ เปิด google sheet คลิกที่ปุ่ม Share และวาง client_email ที่เรา copy ไว้ จากนั้นคลิกปุ่ม Done เราก็จะมาเขียนโปรแกรมดึงข้อมูลกัน ในที่นี้ขอเขียน Python เนอะ เริ่มจาก install library ที่จำเป็นกันก่อนค่ะ เปิด command line แล้วรันคำสั่งนี้กันเลย pip install oauth2client gspread ที่แสดงในภาพข้างต้นแบบนั้น เนื่องจากเรา install ไปแล้วค่ะ ต่อไปเรามาเริ่ม code กันเล้ย อย่าลืม!! บันทึกไฟล์ไว้ที่เดียวกับ credentials.json เน้อ ที่สี่เหลี่ยมสีแดง คือ ลิงค์ของ google sheet ที่เราให้สิทธิ์การเข้าถึงไว้ เรียบร้อยมาลองรันกันดู ลืมให้ดูข้อมูลใน google sheet รูปด้านล่างเลยจ้า ถ้ารันไม่ได้ ให้ไปที่เมนู Library แล้วค้นหา API Library ของเรา แล้วคลิก Enable เรียบร้อยแล้วลองรันใหม่ดูค่ะ

Read More »

วิธีสร้าง Running Number ข้อมูลที่ถูก Filter ใน Excel

หลายครั้งที่เรา ใช้ Excel แล้วใส่ Filter  เพื่อดูกลุ่มข้อมูลที่สนใจ และพบปัญหาว่าลำดับข้อมูลที่เคยเรียงอยู่ ไม่เรียงเหมือนเดิม เช่น  1,3,7,8 แล้วจะทำยังไงดีล่ะ ซึ่งใน Excel จะมี Function SUBTOTAL ซึ่งช่วยทำการคำนวณเฉพาะข้อมูลที่ยังคงมองเห็นอยู่หลังถูก Filter ไปแล้วโดย รูปแบบคำสั่งของ SUBTOTAL คือ SUBTOTAL (function_num, ref1, [ref2], …) โดยจะมี function_code ฟังก์ชันที่จะใช้ในการรวมผลย่อย 1 คือ AVERAGE 2 คือ COUNT 3 คือ COUNTA 4 คือ MAX 5 คือ MIN 6 คือ PRODUCT 7 คือ STDEV 8 คือ STDEVP 9 คือ SUM 10 คือ VAR 11 คือ VARP ในที่นี้เราใช้ code 3 (COUNTA) ในการนับจำนวนข้อมูลจากแถวแรกถึงแถวที่จะใส่เลขลำดับนั้นๆ เพื่อให้รู้ว่ามีข้อมูลกี่รายการหลังถูก Filter ไปแล้ว ตัวอย่างวันนี้ เป็นข้อมูลจากการสำรวจ size เสื้อขององค์กร เมื่อเรา Filter หน่วยงานที่สังกัด เพื่อที่จะดูว่าใครสั่ง size เสื้ออะไรบ้าง สามารถเขียนสูตรในแถวที่ 2 ได้ ดังนี้ =SUBTOTAL(3,B2:B2) โดยคอลัมน์ที่เราใช้ในสูตร ต้องไม่มีค่าว่าง ในตัวอย่างนี้จะใช้ คอลัมน์ B (ชื่อ-สกุล) หรือ C (หน่วยงานที่สังกัด) ก็ได้ การ copy สูตร ควรจะ fix cell Reference เพื่อไม่ให้สูตรเลื่อน จะได้เป็น =SUBTOTAL(3,B$2:B2) ซึ่งสูตรนี้จะไม่นับแถวสุดท้ายของการ filter จึงต้อง คูณด้วย *1 เพื่อให้เอาแถวสุดท้ายของการ filter มานับด้วย สุดท้ายจึงผลลัพธ์ของสูตรออกมา =SUBTOTAL(3,B$2:B2)*1 จากนั้นเราสามารถ copy สูตรมาใช้ได้ทั้งคอลัมน์ เมื่อทำการ filter หลังจากใช้สูตร จากรูปสังเกตในช่องสูตรลำดับที่ 1 เดิมจะเป็นข้อมูล แถวที่ 2 คอลัมน์ที่ 3 นั้นเอง ขอขอบคุณ :https://www.inwexcel.com

Read More »