graph LR
A["ข้อมูลดิบ<br/>(Raw Data)"] --> B["ข้อมูล<br/>(Information)"]
B --> C["ข้อมูลเชิงลึก<br/>(Insight)"]
C --> D["การกระทำ<br/>(Action)"]
style A fill:#ffcccc
style B fill:#ffffcc
style C fill:#ccffcc
style D fill:#ccccff
วัตถุประสงค์การเรียนรู้
เมื่อจบบทนี้ ผู้เรียนจะสามารถ
- อธิบายบทบาทและความสำคัญของการวิเคราะห์ข้อมูลในการวางกลยุทธ์ทางธุรกิจสมัยใหม่
- ทำความเข้าใจโครงสร้างของฐานข้อมูลเชิงสัมพันธ์ที่ใช้ในธุรกิจ ผ่านตัวอย่างฐานข้อมูล PiCha
- ระบุองค์ประกอบสำคัญของฐานข้อมูล PiCha ได้แก่ ตาราง (Table) แถว (Row) คอลัมน์ (Column) ชนิดข้อมูล และความสัมพันธ์ระหว่างตาราง
บทนำ: ผู้บริหารกับการตัดสินใจด้วยข้อมูล
ลองพิจารณาสถานการณ์ที่ผู้เรียนอยู่ในบทบาทของผู้จัดการฝ่ายการตลาดของ PiCha Tea House แบรนด์ชาพรีเมียมสัญชาติไทยที่กำลังเติบโตอย่างต่อเนื่องในกรุงเทพฯ ในช่วงเวลาที่บริษัทกำลังวางแผนเปิด สาขาที่ 7 พร้อมทั้งทบทวนกลยุทธ์ด้านเมนูและราคา ผู้บริหารจำเป็นต้องตอบคำถามสำคัญหลายประการเพื่อสนับสนุนการตัดสินใจทางธุรกิจ
- ควรเปิดสาขาใหม่ที่ใด ย่านใดและรูปแบบทำเลแบบใด เช่น ศูนย์การค้า อาคารสำนักงาน หรือร้านริมถนน ที่ให้ผลตอบแทนดีที่สุด
- กลุ่มลูกค้าเป้าหมายคือใคร ลูกค้าในช่วงอายุใด ระดับรายได้ใด และ loyalty tier ใดที่สร้างรายได้หลักให้กับแบรนด์
- ควรให้ความสำคัญกับเมนูประเภทใด ระหว่าง milk tea, fruit tea, blended และ pure tea เมนูกลุ่มใดขายดีและทำกำไรได้สูง
- ระดับราคาที่เหมาะสมควรเป็นเท่าใด และช่องทางใด เช่น dine-in, to-go หรือ delivery ที่ลูกค้ามีแนวโน้มยอมจ่ายมากกว่า
- ปัจจัยใดมีผลต่อประสบการณ์ของลูกค้ามากที่สุด ไม่ว่าจะเป็นความรวดเร็วในการเตรียมเครื่องดื่ม คุณภาพของสินค้า หรือบรรยากาศภายในร้าน
ในอดีต คำถามลักษณะนี้มักอาศัยประสบการณ์และวิจารณญาณของผู้บริหารเป็นสำคัญ อย่างไรก็ตาม ในปัจจุบัน PiCha มีข้อมูลธุรกรรมจริงจำนวนมากที่บันทึกรายละเอียดของลูกค้า สาขา เมนู ราคา ช่วงเวลาการซื้อ และระดับความพึงพอใจ ข้อมูลเหล่านี้จึงไม่ได้เป็นเพียงบันทึกการดำเนินงานประจำวัน แต่เป็นทรัพยากรเชิงกลยุทธ์ที่สามารถนำมาวิเคราะห์เพื่อสนับสนุนการตัดสินใจได้อย่างเป็นระบบ
นี่คือจุดที่ การวิเคราะห์ข้อมูล (Data Analytics) และ SQL (Structured Query Language) เข้ามามีบทบาทสำคัญ การวิเคราะห์ข้อมูลคือกระบวนการเปลี่ยนข้อมูลดิบให้กลายเป็นสารสนเทศและข้อค้นพบที่นำไปใช้ได้จริง ส่วน SQL คือภาษาที่ใช้สื่อสารกับฐานข้อมูลเพื่อดึง ตรวจสอบ และจัดการข้อมูลเหล่านั้นอย่างมีประสิทธิภาพ
ดังนั้น การเรียนรู้ SQL ในบทนี้จึงไม่ได้มีเป้าหมายเพียงเพื่อเพิ่มทักษะทางเทคนิคเท่านั้น แต่ยังเป็นการฝึกคิดเชิงธุรกิจ ตั้งคำถามอย่างมีโครงสร้าง และใช้ข้อมูลเป็นหลักฐานในการสนับสนุนการตัดสินใจอย่างมีเหตุผล
การวิเคราะห์ข้อมูลคืออะไร และสำคัญอย่างไรต่อธุรกิจ
การวิเคราะห์ข้อมูล (Data Analytics) คือกระบวนการที่เป็นระบบในการตรวจสอบ ทำความสะอาด แปลงรูปแบบ และสร้างแบบจำลองจากข้อมูล เพื่อค้นหาข้อมูลเชิงลึกที่มีคุณค่า สนับสนุนการตัดสินใจเชิงกลยุทธ์ และสร้างความเข้าใจที่ลึกซึ้งยิ่งขึ้นเกี่ยวกับสถานการณ์ทางธุรกิจ
ในมุมของผู้บริหาร เราอาจมอง Data Analytics ผ่านกรอบของ “คำถามธุรกิจ” ที่สำคัญ 4 ประเภท
- เกิดอะไรขึ้น? (Descriptive Analytics) ใช้เพื่ออธิบายภาพอดีตถึงปัจจุบัน เช่น
- “ยอดขายเฉลี่ยต่อวันของแต่ละสาขาเป็นเท่าไร?”
- “ลูกค้า PiCha Tea House ส่วนใหญ่อยู่ในกลุ่มอายุใด?” ที่ระดับนี้ ผู้บริหารกำลังมอง “แดชบอร์ดภาพรวมธุรกิจ” เพื่อรู้สถานะปัจจุบัน
- ทำไมถึงเกิด? (Diagnostic Analytics) ใช้เพื่อเจาะลึกสาเหตุเบื้องหลังตัวเลข เช่น
- “ทำไมยอดขายเมนูชาผลไม้เพิ่มขึ้นในช่วงฤดูร้อน?”
- “ทำไมสาขา ICONSIAM จึงมีคะแนนความพึงพอใจต่ำในช่วงเย็น?” ในขั้นนี้ ผู้บริหารเริ่มเชื่อมโยงตัวเลขกับบริบท เช่น สถานที่ เวลา โปรโมชั่น ความหนาแน่นของลูกค้า
- จะเกิดอะไรขึ้นต่อไป? (Predictive Analytics) ใช้เทคนิคสถิติและ machine learning เพื่อคาดการณ์อนาคต เช่น
- “กลุ่มลูกค้าไหนมีแนวโน้มจะซื้อซ้ำมากที่สุด?”
- “ความต้องการในไตรมาสหน้ามีแนวโน้มเป็นอย่างไร?” สำหรับผู้บริหาร นี่คือพื้นฐานของการวางแผนล่วงหน้าอย่างมีหลักฐานรองรับ
- ควรทำอะไร? (Prescriptive Analytics) ใช้ insights และอัลกอริทึมเพื่อเสนอ “ทางเลือกในการลงมือทำ” ที่เหมาะสมที่สุด เช่น
- “ควรวางโปรโมชันแบบใดในช่วงเวลาที่ลูกค้าเบาบางเพื่อให้รายได้รวมทั้งวันสูงที่สุด?”
- “ควรเลือกลงทุนระหว่างขยายสาขาหรือเพิ่มที่นั่ง ทางเลือกใดจะทำให้ธุรกิจได้ผลตอบแทนสูงกว่ากัน?”
ในทางปฏิบัติ ขั้นตอนเหล่านี้มักเชื่อมต่อกัน เช่น ที่ PiCha ผู้จัดการอาจเริ่มจาก Descriptive ว่า “สาขาไหนขายดีที่สุด” จากนั้นใช้ Diagnostic เพื่อหาสาเหตุ เช่น ทำเล ลูกค้าประเภทใด เมนูอะไรที่ดึงยอดขาย แล้วจึงใช้ Predictive/Prescriptive เพื่อวางแผนการขยายสาขาหรือปรับ mix เมนูในอนาคต
สำหรับ PiCha การทำความเข้าใจพฤติกรรมการซื้อและปัจจัยที่ผลักดันการตัดสินใจของลูกค้ากลุ่มต่าง ๆ ช่วยให้ทีมงานตัดสินใจได้ตั้งแต่การเลือกเมนูพระเอกของแบรนด์ การตั้งราคา ไปจนถึงการเลือกทำเลของสาขาใหม่
จากข้อมูลดิบสู่ข้อมูลเชิงลึกที่นำไปปฏิบัติได้
โดยทั่วไปเราจะแบ่งขั้นตอนในการวิเคราะห์ข้อมูลออกเป็น 4 ขั้น ดังนี้
ขั้นตอนที่ 1: ข้อมูลดิบ (Raw Data)
สำหรับ PiCha ข้อมูลดิบอยู่ในรูปของ
- ธุรกรรมกว่า 53,000 รายการจาก 6 สาขา
- พฤติกรรมการสั่งซื้อที่แตกต่างของลูกค้า 2,500 คน
- คะแนนความพึงพอใจที่ลูกค้าให้หลังได้รับสินค้าแต่ละออเดอร์
ข้อมูลเหล่านี้อยู่ในระดับที่ “ยังตอบคำถามผู้บริหารไม่ได้โดยตรง” เพราะยังไม่ถูกจัดรูปแบบและสรุปให้อ่านง่าย
ขั้นตอนที่ 2: สารสนเทศ (Information)
เมื่อใช้ SQL ประมวลผลข้อมูลดิบ เราจะได้เป็น “สารสนเทศ” เช่น
- ยอดขายรายสาขาแยกตามช่วงเวลา
- รายงานจำนวนออเดอร์เฉลี่ยต่อวันในแต่ละช่องทาง (dine-in, to-go, delivery)
- ลิสต์เมนูขายดีของแต่ละสาขา
- การกระจายคะแนนความพึงพอใจของลูกค้าตามช่วงเวลาหรือประเภทสาขา
นี่คือรายงานส่วนใหญ่ที่พบเห็นในองค์กร แต่ยังไม่ตอบคำถามว่า “แล้วเราควรทำอะไรต่อ”
ขั้นตอนที่ 3: ข้อมูลเชิงลึก (Insight)
เมื่อนักวิเคราะห์ข้อมูลและผู้บริหารนำข้อมูลเหล่านั้นมาตีความในบริบทธุรกิจ ข้อมูลเริ่มกลายเป็น “ข้อมูลเชิงลึก” ตัวอย่างเช่น
- “ลูกค้า Gold tier สั่งผ่าน delivery มากกว่า Bronze tier ถึง 2 เท่า และมีค่าเฉลี่ยต่อออเดอร์สูงกว่า 40%”
- “สาขา ICONSIAM มียอดขายพุ่งสูงช่วง 17:00–19:00 น. แต่คะแนนความพึงพอใจต่ำที่สุดในช่วงเดียวกัน”
- “หมวด blended drinks ให้ margin สูงสุด แต่กลับมีสัดส่วนยอดขายต่ำที่สุดในทุกสาขา”
บทวิเคราะห์เหล่านี้เริ่มตอบคำถามว่า “เกิดอะไรขึ้น” และ “ทำไม” ถึงเกิดขึ้น ซึ่งนำไปสู่การตัดสินใจว่าองค์กรควรกระทำอะไรและอย่างไร
ขั้นตอนที่ 4: การกระทำ (Action)
เป้าหมายของ analytics คือ การนำไปสู่ “การกระทำ” ที่จับต้องได้ เช่น
- กลยุทธ์การตลาด
- ออกโปรโมชั่น delivery เฉพาะสมาชิก Gold เพื่อเพิ่มความถี่การสั่งซื้อ
- สร้างแคมเปญ reactivation สำหรับลูกค้า Bronze ที่ไม่ซื้อซ้ำมาระยะหนึ่ง
- การจัดการเมนู
- ผลักดัน blended drinks ผ่านเมนูแนะนำและ cross-sell คู่กับเมนูยอดนิยม
- ทดสอบเมนูใหม่เฉพาะในสาขาที่มีลูกค้าสนใจสุขภาพสูง
- การบริหารสาขา
- เพิ่มพนักงานหรือปรับ workflow สาขา ICONSIAM ช่วงเย็นเพื่อลดเวลารอ
- ทบทวน rental efficiency ของสาขาที่มีค่าเช่าสูงแต่ยอดขายและ margin ต่ำ
การตัดสินใจเหล่านี้คือ “มูลค่าทางธุรกิจ” ที่ analytics ช่วยสร้าง โดย journey ทั้งหมดนี้ต้องพึ่งโครงสร้างฐานข้อมูลที่ดีและความสามารถในการเขียนชุดคำสั่งสืบค้น (query) ด้วย SQL
กรณีศึกษาการใช้งาน Data Analytics ในธุรกิจ PiCha
เพื่อให้เห็นภาพชัดขึ้น ลองดูตัวอย่าง “คำถามธุรกิจ” ที่ผู้บริหาร PiCha Tea House สามารถตอบได้จากฐานข้อมูลของตนเอง
1. การแบ่งกลุ่มลูกค้า (Customer Segmentation)
- คำถามทางธุรกิจ: “ลูกค้าของ PiCha แบ่งเป็นกลุ่มใหญ่ ๆ ได้อย่างไร?”
- ข้อมูลที่ใช้: ตาราง
customersและtransactionsเช่น age_group, income_segment, loyalty_tier, frequency, basket size - แนวคิดการวิเคราะห์
- แบ่งกลุ่มตามช่วงอายุ ระดับรายได้ และ loyalty tier
- ดูยอดขายและความถี่การซื้อของแต่ละกลุ่ม
- ประโยชน์เชิงกลยุทธ์
- ออกแบบโปรแกรมสะสมแต้มและสิทธิพิเศษให้เหมาะกับแต่ละกลุ่ม
- เลือกช่องทางสื่อสาร (เช่น TikTok vs Instagram) ให้ตรงกับกลุ่มเป้าหมายหลัก
2. การวิเคราะห์ความต้องการสินค้า (Product Demand Analysis)
- คำถามทางธุรกิจ: “ลูกค้าต้องการเมนูอะไร? สาขาไหนขายอะไรดีที่สุด?”
- ข้อมูลที่ใช้: ตาราง
menus,order_items,transactions - แนวคิดการวิเคราะห์
- นับยอดขายตามเมนูและหมวด (milk_tea, fruit_tea, pure_tea, blended)
- แยกตามสาขา ช่วงเวลา และช่องทางขาย
- ประโยชน์เชิงกลยุทธ์
- ปรับสัดส่วนประเภทเมนูและแผนสต็อกวัตถุดิบให้เหมาะกับความต้องการจริง
- วางเมนู signature ให้ตรงกับพฤติกรรมของลูกค้าแต่ละสาขา
3. การวิเคราะห์ช่องทางและราคา (Channel & Pricing Analysis)
- คำถามทางธุรกิจ: “ลูกค้าแต่ละช่องทางยอมจ่ายเท่าไร? ราคาแบบไหนที่เหมาะกับแต่ละช่องทาง?”
- ข้อมูลที่ใช้: ตาราง
transactions(channel, platform, net_sales_thb, basket_qty, delivery_fee_paid_by_customer ฯลฯ) - แนวคิดการวิเคราะห์
- เปรียบเทียบค่าเฉลี่ยต่อออเดอร์ (AOV) และ margin ตามช่องทาง (dine_in, to_go, delivery)
- วิเคราะห์ผลของ delivery fee, platform commission และค่าส่งเสริมการขายต่อกำไรสุทธิ
- ประโยชน์เชิงกลยุทธ์
- ตั้งราคาและโครงสร้างการส่งเสริมการขายให้เหมาะกับแต่ละช่องทาง
- ตัดสินใจได้ว่าควรผลักดัน direct channel หรือ platform ใดมากเป็นพิเศษ
4. การวิเคราะห์พฤติกรรมสมาชิก (Loyalty Behavior Analysis)
- คำถามทางธุรกิจ: “สมาชิก Gold แตกต่างจาก Bronze อย่างไร?”
- ข้อมูลที่ใช้: ตาราง
customersและtransactions - แนวคิดการวิเคราะห์
- เปรียบเทียบความถี่การซื้อ ประเภทเมนู และความอ่อนไหวต่อส่วนลด
- ดูความสัมพันธ์ระหว่าง loyalty_tier กับ satisfaction_score
- ประโยชน์เชิงกลยุทธ์
- ออกแบบสิทธิพิเศษที่ช่วยรักษาลูกค้ามูลค่าสูง
- วางเส้นทางเลื่อนระดับ (tier progression) ให้จูงใจลูกค้ากลุ่มกลางขึ้นเป็นกลุ่มบน
5. การวิเคราะห์ประสิทธิภาพและความเสี่ยงสาขา (Performance & Risk Analysis)
- คำถามทางธุรกิจ: “สาขาหรือเมนูใดที่มีความเสี่ยงในการดำเนินธุรกิจ”
- ข้อมูลที่ใช้: ตาราง
stores,transactions,order_items - แนวคิดการวิเคราะห์
- เปรียบเทียบยอดขาย margin และ wait_time_min ระหว่างสาขา
- วิเคราะห์เมนูที่ margin ต่ำหรือขายไม่ดีแต่ใช้ทรัพยากรมาก
- ประโยชน์เชิงกลยุทธ์
- กำหนดแผนปรับปรุงสาขา ปรับเมนู หรือตัดสินใจเรื่องการต่อสัญญาเช่าทำเล
- ลดความเสี่ยงจากสินค้าหรือสาขาที่ไม่ทำกำไร
ฐานข้อมูลเชิงสัมพันธ์: ภาพธุรกิจในรูปแบบตาราง
เบื้องหลังรายงานต่าง ๆ ของ PiCha Tea House มี “ฐานข้อมูล (Database)” ที่คอยเก็บข้อมูลธุรกิจในรูปแบบที่สามารถค้นหา วิเคราะห์ และเชื่อมโยงกันได้อย่างเป็นระบบ และมีประสิทธิภาพ
ฐานข้อมูลเชิงสัมพันธ์ (Relational Database) เป็นรูปแบบที่นิยมมากที่สุดในโลกธุรกิจ เพราะเก็บข้อมูลในรูปแบบของ ตาราง (Tables) หลาย ๆ ตาราง โดยแต่ละตารางทำการจัดเก็บข้อมูลแต่ละด้าน เช่น ตารางเก็บข้อมูลสินค้า ตารางเก็บข้อมูลลูกค้า ตารางเก็บรายการสั่งซื้อสินค้า โดยตารางเหล่านี้สามารถเชื่อมโยงเข้าหากันเพื่อให้เห็นมุมมองในด้านต่าง ๆ ที่ผู้ใช้ต้องการ เปรียบเทียบง่าย ๆ คือ
- แต่ละ ตาราง = แฟ้มเอกสารประเภทหนึ่ง (เช่น แฟ้มลูกค้า แฟ้มสาขา แฟ้มออเดอร์)
- แต่ละ แถว (Row / Record) = เอกสารหนึ่งชุด (เช่น ลูกค้าหนึ่งคน ออเดอร์หนึ่งออเดอร์ สาขาหนึ่งสาขา)
- แต่ละ คอลัมน์ (Column / Field) = ช่องข้อมูลในเอกสาร (เช่น อายุ ช่องทางการขาย จำนวนเมนู)
ภาพรวมฐานข้อมูล PiCha: 6 แง่มุมของธุรกิจชา
ในตำรานี้ เราจะใช้ฐานข้อมูลสำเร็จรูปของ PiCha เป็นสนามฝึกปฏิบัติ ประกอบด้วย 6 ตารางหลัก ที่แทน 6 ด้านสำคัญของธุรกิจ
customers– โปรไฟล์ลูกค้าmenus– รายการเมนูและคุณลักษณะของสินค้าstores– ข้อมูลสาขาและทำเลtransactions– ออเดอร์และผลลัพธ์ทางการเงิน/ประสบการณ์order_items– รายการสินค้าในแต่ละออเดอร์reviews– เสียงสะท้อนจากลูกค้า
ฐานข้อมูล PiCha ถูกออกแบบให้จำลองข้อมูลของธุรกิจจำหน่ายเครื่องดื่มชาแบบมีหน้าร้าน ทั้งในแง่โครงสร้างตาราง ความสัมพันธ์ และการจำลองพฤติกรรมลูกค้า เพื่อใช้สาธิตให้เห็นการตั้งคำถามรวมถึงการหาคำตอบทางธุรกิจโดยใช้ภาษา SQL
Data dictionary
Data Dictionary คือเอกสารที่อธิบายความหมายของแต่ละคอลัมน์ในแต่ละตาราง ก่อนที่เราจะเขียน SQL หรือตีความผลลัพธ์ได้อย่างถูกต้อง เราต้องเข้าใจก่อนว่าข้อมูลแต่ละช่องหมายความว่าอะไร หน่วยคืออะไร และค่าที่เป็นไปได้มีอะไรบ้าง
1. customers: โปรไฟล์ลูกค้า
| คอลัมน์ | ประเภท | ตัวอย่างค่า | คำอธิบาย |
|---|---|---|---|
customer_id |
BIGINT | 1000 – 3499 | รหัสลูกค้าแบบเฉพาะไม่ซ้ำ |
age_group |
VARCHAR | Gen_Z_18_24, Gen_Z_25_29, Millennial_30_35, Older_36plus |
กลุ่มช่วงอายุของลูกค้า |
gender |
VARCHAR | female, male |
เพศตามที่ลูกค้าระบุ |
income_segment |
VARCHAR | low, mid, high |
ระดับรายได้ (กำหนดตามการกระจายตัวของกลุ่มอายุ) |
loyalty_tier |
VARCHAR | none, member, silver, gold |
ระดับสมาชิกในโปรแกรมสะสมแต้มปัจจุบัน โดยระดับจะเปลี่ยนแปลงตามแบบจำลองมาร์คอฟในแต่ละสัปดาห์ของการจำลอง |
discovery_channel |
VARCHAR | tiktok, instagram, word_of_mouth, delivery_app, walk_in |
ช่องทางแรกที่ลูกค้ารู้จัก PiCha |
health_conscious |
BIGINT | 0 or 1 | 1 = ชอบหวานน้อย, 0 = ไม่มีความชอบเป็นพิเศษ (62% ของลูกค้าสนใจสุขภาพ) |
sweetness_preference |
VARCHAR | full, less_sweet, adaptive |
รูปแบบความหวานที่ลูกค้ามักสั่งเป็นประจำ |
acquisition_date |
DATE | 2026-02-01 – 2026-03-31 | วันที่ลูกค้าเริ่มถูกบันทึกเข้าระบบครั้งแรก (มีการได้ลูกค้าเพิ่มเป็นช่วง ๆ และมีช่วงพีกจากอีเวนต์/กิจกรรม) |
3. stores: ข้อมูลสาขา
| คอลัมน์ | ประเภท | ตัวอย่างค่า | คำอธิบาย |
|---|---|---|---|
store_id |
BIGINT | 1 – 6 | รหัสสาขาแบบเฉพาะไม่ซ้ำ |
store_name |
VARCHAR | See below | ชื่อสาขาที่มนุษย์อ่านเข้าใจง่าย |
branch_type |
VARCHAR | mall, street, office, mixed_use, mall_flagship |
ประเภทการดำเนินงานของสาขา |
district |
VARCHAR | Pathum Wan, Bang Rak, Khlong Toei, Ratchathewi, Khlong San |
เขตในกรุงเทพฯ ที่สาขาตั้งอยู่ |
seats |
BIGINT | 6 – 30 | จำนวนที่นั่งรองรับลูกค้า |
takeaway_heavy_flag |
BIGINT | 0 or 1 | 1 = เป็นสาขาที่เน้นขายแบบซื้อกลับเป็นหลัก |
office_traffic_index |
DOUBLE | 0.5 – 0.95 | ระดับความใกล้กับแหล่งพนักงานออฟฟิศ (ค่าถูกปรับให้อยู่ในสเกลมาตรฐาน) |
mall_traffic_index |
DOUBLE | 0.3 – 1.0 | ระดับความใกล้กับกลุ่มลูกค้าห้างสรรพสินค้า (ค่าถูกปรับให้อยู่ในสเกลมาตรฐาน) |
delivery_catchment_score |
DOUBLE | 0.65 – 0.95 | คุณภาพการครอบคลุมของแพลตฟอร์มเดลิเวอรีในพื้นที่ (ค่าถูกปรับให้อยู่ในสเกลมาตรฐาน) |
opening_date |
DATE | 2025-03-01 – 2026-01-15 | วันที่สาขาเปิดทำการ |
flagship_flag |
BIGINT | 0 or 1 | 1 = เป็นสาขาแฟลกชิป (เช่น ICONSIAM) |
floor_area_sqm |
BIGINT | 20 – 120 | พื้นที่ใช้สอยของร้าน (ตารางเมตร) |
monthly_rent_thb |
BIGINT | 65,000 – 350,000 | ค่าเช่ารายเดือน (บาท) |
num_employees |
BIGINT | 4 – 12 | จำนวนพนักงานรวมทั้งหมด |
num_baristas |
BIGINT | 3 – 8 | จำนวนบาริสต้า (มีผลต่อการสเกลเวลาเตรียมเครื่องดื่ม) |
daily_capacity |
BIGINT | 200 – 600 | จำนวนออเดอร์สูงสุดต่อวัน (มีผลต่อการสเกลเวลาให้ลูกค้ารอ) |
bts_distance_m |
BIGINT | 80 – 500 | ระยะทางจากสาขาถึงสถานี BTS ที่ใกล้ที่สุด (เมตร) |
nearby_competitors |
BIGINT | 1 – 4 | จำนวนร้านคู่แข่งในบริเวณใกล้เคียง |
google_rating |
DOUBLE | 4.1 – 4.8 | คะแนนรีวิวใน Google Maps |
has_parking |
BIGINT | 0 or 1 | 1 = มีที่จอดรถให้ลูกค้า |
lease_end_date |
DATE | 2027-04-14 – 2031-01-14 | วันที่สัญญาเช่าปัจจุบันจะสิ้นสุด |
4. transactions: ออเดอร์ระดับภาพรวม
| คอลัมน์ | ประเภท | ตัวอย่างค่า | คำอธิบาย |
|---|---|---|---|
transaction_id |
BIGINT | 1 – 45,430 | รหัสออเดอร์แบบเฉพาะไม่ซ้ำ (เรียงตาม order_datetime) |
order_datetime |
TIMESTAMP | 2026-02-01 09:00 – 2026-04-01 21:59 | วัน–เวลาแบบเต็มของการสั่งซื้อ |
order_date |
DATE | 2026-02-01 – 2026-04-01 | วันที่ของออเดอร์ (เฉพาะส่วนวันที่) |
hour |
BIGINT | 9 – 21 | ชั่วโมงที่มีการสั่ง (9 = 09:00, 21 = 21:00) |
day_of_week |
VARCHAR | Monday – Sunday |
ชื่อวันในสัปดาห์ |
dow_int |
BIGINT | 0 – 6 | ดัชนีเลขของวันในสัปดาห์ (0 = Monday, 6 = Sunday) |
month |
BIGINT | 2 – 4 | เลขเดือนของวันที่ออเดอร์เกิดขึ้น |
store_id |
BIGINT | 1 – 6 | คีย์นอกเชื่อมไปยัง stores.store_id |
channel |
VARCHAR | dine_in, to_go, delivery |
ช่องทางให้บริการออเดอร์ (ทานที่ร้าน ซื้อกลับบ้าน หรือเดลิเวอรี) |
platform |
VARCHAR | YumDash, C2U, direct |
แพลตฟอร์มเดลิเวอรี (direct สำหรับออเดอร์ที่ไม่ใช่เดลิเวอรี) |
customer_id |
BIGINT | 1000 – 3499, or NULL | คีย์นอกเชื่อมไปยัง customers.customer_id ค่าเป็น NULL ~74% ของออเดอร์ (ลูกค้า walk-in/เดลิเวอรีที่ไม่ระบุตัวตน) |
basket_qty |
BIGINT | 1 – 4 | จำนวนเมนูในออเดอร์ |
gross_sales_thb |
DOUBLE | 85 – 653 | ผลรวมของ unit_list_price_thb × qty ของทุกบรรทัด (ก่อนหักส่วนลดใด ๆ) |
item_discount_thb |
DOUBLE | 0 – 54 | ผลรวมส่วนลดระดับบรรทัด (line_discount_thb) ของทุกบรรทัด |
order_discount_thb |
DOUBLE | 0 – 30 | ส่วนลดในระดับออเดอร์จากแคมเปญโปรโมชั่น (เช่น โค้ด BUILDER3 = ลด 30 บาท) |
delivery_fee_paid_by_customer |
DOUBLE | 0 – 70 | ค่าจัดส่งที่เก็บจากลูกค้า โดยช่วงชั่วโมงพีก (11–13 และ 17–19 น.) มีการบวก surge price 1.4 เท่า |
platform_subsidy_thb |
DOUBLE | 0 – 32 | เงินอุดหนุนค่าจัดส่งจากแพลตฟอร์ม (ใช้กับประมาณ 38% ของออเดอร์เดลิเวอรีที่ยอดก่อนส่วนลด ≥ 199 บาท) |
net_sales_thb |
DOUBLE | 76 – 683 | ยอดขายสุทธิของออเดอร์ = gross_sales_thb - item_discount_thb - order_discount_thb + delivery_fee_paid_by_customer |
cogs_thb |
DOUBLE | 19 – 219 | ผลรวมต้นทุนสินค้าที่ขาย (line_cogs_thb) ของทุกบรรทัด |
packaging_cost_thb |
DOUBLE | 2 – 20 | ค่าบรรจุภัณฑ์: เดลิเวอรี 5 บาท/เมนู, ช่องทางอื่น 2 บาท/เมนู |
platform_commission_thb |
DOUBLE | 0 – 147 | ค่าคอมมิชชันของแพลตฟอร์ม: YumDash = 23%, C2U = 19% ของยอดขายสุทธิของสินค้า (เฉพาะเดลิเวอรี) |
labor_alloc_thb |
DOUBLE | 4 – 8 | ต้นทุนแรงงานที่จัดสรรต่อออเดอร์: 4 + 0.8 × จำนวนเมนูในออเดอร์ (basket_qty) |
contribution_margin_thb |
DOUBLE | 39 – 309 | กำไรส่วนเพิ่ม (contribution margin) ของออเดอร์ = net_sales_thb - cogs_thb - packaging_cost_thb - labor_alloc_thb - platform_commission_thb |
prep_time_min |
DOUBLE | 3.0 – 17.0 | เวลาเตรียมเครื่องดื่มพื้นฐาน สเกลตามแรงกดดันด้านความจุของสาขา: 3.0 × (orders_today / daily_capacity) / median_pressure + 1.5 × basket_qty + 2.0 (ถ้าเป็นเดลิเวอรี) + noise |
wait_time_min |
DOUBLE | 0.0 – 21.0 | เวลาที่ลูกค้าต้องรอรับเครื่องดื่ม สำหรับ dine_in/to_go คำนวณจาก prep_time × pressure_factor - (1 ถึง 3 นาที) และสเกลตามความหนาแน่นของคิวในร้าน |
pickup_time_min |
DOUBLE | 0.0 – 42.0 | เวลาไปรับสินค้าในกรณีเดลิเวอรี คำนวณจาก prep_time × pressure_factor + (10 ถึง 25 นาที) และมีค่าเป็น 0 สำหรับออเดอร์ที่ไม่ใช่เดลิเวอรี |
satisfaction_score |
BIGINT | 1 – 5 | คะแนนความพึงพอใจของลูกค้า (1 = แย่ที่สุด, 5 = ดีที่สุด) โมเดลจากประเภทสาขา โบนัสจากความภักดี, โทษจากเวลารอที่นาน และโบนัสจากส่วนลด |
promo_id |
VARCHAR | NULL, MORNING15, HAPPY2FOR1, BUILDER3, FLAVOR50, WELCOME20 |
โค้ดแคมเปญโปรโมชั่นที่ผูกกับออเดอร์ (ประมาณ 11% ของออเดอร์มีโปรโมชัน) |
weather_flag |
VARCHAR | sunny, cloudy, rainy |
สภาพอากาศในวันที่มีออเดอร์ (จำลองด้วยแบบจำลองมาร์คอฟและการกระจายตามฤดูกาล) |
peak_flag |
BIGINT | 0 or 1 | 1 ถ้าออเดอร์เกิดในช่วงชั่วโมงพีก (11–13, 17–19 น.) |
weekend_flag |
BIGINT | 0 or 1 | 1 ถ้าเป็นวันเสาร์หรือวันอาทิตย์ |
morning_flag |
BIGINT | 0 or 1 | 1 ถ้าออเดอร์เกิดก่อนเวลา 11:00 (ชั่วโมง 9–10) |
5. order_items: รายการสินค้าในแต่ละออเดอร์
| คอลัมน์ | ประเภท | ตัวอย่างค่า | คำอธิบาย |
|---|---|---|---|
transaction_id |
BIGINT | 1 – 45,430 | คีย์นอกเชื่อมไปยัง transactions.transaction_id |
line_no |
BIGINT | 1 – 4 | ลำดับบรรทัดของสินค้าในธุรกรรม (เริ่มนับจาก 1) |
sku_id |
BIGINT | 1 – 22 | คีย์นอกเชื่อมไปยัง menus.sku_id |
qty |
BIGINT | Always 1 | จำนวนต่อบรรทัด (กำหนดให้เป็น 1 เสมอ; ขนาดตะกร้าสินค้าวัดที่ระดับธุรกรรมแทน) |
unit_list_price_thb |
BIGINT | 85 – 172 | ราคาต่อหน่วยหลังบวกมาร์กอัปเดลิเวอรี (บาท) โดยออเดอร์เดลิเวอรีจะถูกบวกเพิ่ม 6–18% |
line_discount_thb |
DOUBLE | 0.0 – 27.0 | จำนวนส่วนลดที่ใช้กับบรรทัดนี้ (บาท) จากระดับสมาชิก โปรโมชั่นตามช่วงเวลา หรือแคมเปญส่วนลด |
net_line_sales_thb |
DOUBLE | 76.5 – 172.0 | ยอดขายสุทธิของบรรทัดนี้ = unit_list_price_thb - line_discount_thb |
sweetness_pct |
BIGINT | 0 – 100 | ระดับความหวานที่ลูกค้าเลือกเป็นเปอร์เซ็นต์ (0 = ไม่ใส่น้ำตาล, 100 = หวานเต็ม) |
ice_level |
VARCHAR | no_ice, less_ice, normal, extra_ice |
ความชอบระดับน้ำแข็งของลูกค้า |
add_on |
VARCHAR | none, extra_pearl, extra_milk_foam |
ท็อปปิ้งเสริมที่ลูกค้าเลือก |
line_cogs_thb |
DOUBLE | 19.1 – 68.8 | ต้นทุนสินค้าที่ขายสำหรับบรรทัดนี้ (~28–40% ของยอดขายสุทธิ ขึ้นอยู่กับกลุ่มเมนู) |
order_datetime |
TIMESTAMP | 2026-02-01 09:00 – 2026-04-01 21:59 | วัน–เวลาแบบเต็มของธุรกรรมหลักที่บรรทัดนี้สังกัดอยู่ |
6. reviews: รีวิวจากลูกค้า
| คอลัมน์ | ประเภท | ตัวอย่างค่า | คำอธิบาย |
|---|---|---|---|
id |
BIGINT | 1 – 100 | รหัสรีวิวแบบเฉพาะไม่ซ้ำ |
topic |
VARCHAR | Picha Tea House |
หัวข้อของรีวิว (ค่าคงที่) |
language |
VARCHAR | th, en |
ภาษาของรีวิว (ไทยหรืออังกฤษ) |
rating |
BIGINT | 1 – 5 | คะแนนรีวิวแบบดาว |
date |
DATE | 2026-02-01 – 2026-04-01 | วันที่เขียนรีวิว |
persona |
VARCHAR | Various | ประเภทบุคลิกของผู้รีวิว |
review_text |
VARCHAR | Free text | เนื้อหาข้อความรีวิวเต็ม |
label |
VARCHAR | authentic |
ป้ายกำกับคุณภาพรีวิว (เช่น รีวิวแท้) |
spam_type |
VARCHAR | NULL | ประเภทของสแปม (ในชุดข้อมูลนี้เป็น NULL ทั้งหมด) |
duplicate_group_id |
VARCHAR | Various | กลุ่มที่จัดรีวิวซ้ำหรือรีวิวที่มีเนื้อหาใกล้เคียงกัน |
แผนภาพ ER และความสัมพันธ์ระหว่างตาราง: เส้นทางเดินของคำถามธุรกิจ
แม้ว่าแต่ละตารางจะเล่าเรื่องคนละด้านของธุรกิจ PiCha แต่ความแข็งแกร่งที่แท้จริงเกิดจาก “การเชื่อมกัน” ของตารางเหล่านี้
erDiagram
customers {
BIGINT customer_id PK
VARCHAR age_group
VARCHAR gender
VARCHAR income_segment
VARCHAR loyalty_tier
VARCHAR discovery_channel
BIGINT health_conscious
VARCHAR sweetness_preference
DATE acquisition_date
}
stores {
BIGINT store_id PK
VARCHAR store_name
VARCHAR branch_type
VARCHAR district
BIGINT seats
BIGINT takeaway_heavy_flag
DOUBLE office_traffic_index
DOUBLE mall_traffic_index
DOUBLE delivery_catchment_score
DATE opening_date
BIGINT flagship_flag
BIGINT floor_area_sqm
BIGINT monthly_rent_thb
BIGINT num_employees
BIGINT num_baristas
BIGINT daily_capacity
BIGINT bts_distance_m
BIGINT nearby_competitors
DOUBLE google_rating
BIGINT has_parking
DATE lease_end_date
}
menus {
BIGINT sku_id PK
VARCHAR sku_name
VARCHAR family
VARCHAR tea_base
BIGINT milk_flag
BIGINT fruit_flag
BIGINT cold_brew_flag
BIGINT blended_flag
VARCHAR size_code
BIGINT size_ml
BIGINT list_price_thb
BIGINT sweetness_min_pct
BIGINT sweetness_max_pct
VARCHAR caffeine_level
BIGINT seasonal_flag
BIGINT signature_flag
BIGINT launch_branch_flag
}
transactions {
BIGINT transaction_id PK
TIMESTAMP order_datetime
DATE order_date
BIGINT hour
VARCHAR day_of_week
BIGINT dow_int
BIGINT month
BIGINT store_id FK
VARCHAR channel
VARCHAR platform
BIGINT customer_id FK
BIGINT basket_qty
DOUBLE gross_sales_thb
DOUBLE item_discount_thb
DOUBLE order_discount_thb
DOUBLE delivery_fee_paid_by_customer
DOUBLE platform_subsidy_thb
DOUBLE net_sales_thb
DOUBLE cogs_thb
DOUBLE packaging_cost_thb
DOUBLE platform_commission_thb
DOUBLE labor_alloc_thb
DOUBLE contribution_margin_thb
DOUBLE prep_time_min
DOUBLE wait_time_min
DOUBLE pickup_time_min
BIGINT satisfaction_score
VARCHAR promo_id
VARCHAR weather_flag
BIGINT peak_flag
BIGINT weekend_flag
BIGINT morning_flag
}
order_items {
BIGINT transaction_id FK
BIGINT line_no
BIGINT sku_id FK
BIGINT qty
BIGINT unit_list_price_thb
DOUBLE line_discount_thb
DOUBLE net_line_sales_thb
BIGINT sweetness_pct
VARCHAR ice_level
VARCHAR add_on
DOUBLE line_cogs_thb
TIMESTAMP order_datetime
}
reviews {
BIGINT id PK
VARCHAR topic
VARCHAR language
BIGINT rating
DATE date
VARCHAR persona
VARCHAR review_text
VARCHAR label
VARCHAR spam_type
VARCHAR duplicate_group_id
}
customers ||--o{ transactions : "places"
stores ||--o{ transactions : "hosts"
transactions ||--|{ order_items : "contains"
menus ||--o{ order_items : "included in"
Primary Key (คีย์หลัก)
Primary Key (PK) คือคอลัมน์ที่ใช้ระบุแต่ละแถวได้อย่างจำเพาะและมีค่าไม่ซ้ำกัน เช่น เลขประจำตัวประชาชน รหัสสินค้า เป็นต้น
ในฐานข้อมูล PiCha
customer_idเป็นคีย์หลักของตารางcustomersstore_idเป็นคีย์หลักของตารางstoressku_idเป็นคีย์หลักของตารางmenustransaction_idเป็นคีย์หลักของตารางtransactions(transaction_id, line_no)เป็นคีย์หลักแบบ composite (คีย์หลักที่ประกอบขึ้นจากคอลัมน์มากกว่า 1 คอลัมน์)ของตารางorder_items
Foreign Key (คีย์นอก)
Foreign Key (FK) คือคอลัมน์ที่ใช้เชื่อมหรืออ้างอิงไปยัง Primary Key ของตารางอื่น
SQL: ภาษากลางสำหรับถามคำถามกับฐานข้อมูล
กลับมาที่บทบาทของคุณในฐานะผู้บริหาร เมื่อคุณอยากถามคำถามโดยอาศัยข้อมูลในฐานข้อมูล PiCha คุณต้องใช้ภาษา SQL (Structured Query Language) ซึ่งเป็นภาษามาตรฐานที่ฐานข้อมูลเชิงสัมพันธ์แทบทุกระบบเข้าใจ ไม่ว่าจะเป็น MySQL, PostgreSQL, SQL Server หรือ DuckDB
ความสามารถหลักของ SQL
SQL มีความสามารถหลักในการจัดการข้อมูลที่เรียกสั้น ๆ ว่า CRUD
- Create (INSERT) – เพิ่มข้อมูลใหม่ เช่น บันทึกธุรกรรมใหม่
- Read (SELECT) – ดึงข้อมูลมาวิเคราะห์ ซึ่งเป็นเนื้อหาหลักของตำราเล่มนี้
- Update (UPDATE) – แก้ไขข้อมูลเดิม
- Delete (DELETE) – ลบข้อมูล
โครงสร้างพื้นฐานของคำสั่ง SQL
คำสั่ง SELECT แบบพื้นฐานมีส่วนประกอบดังนี้
ตัวอย่างเช่น หากคุณต้องการแสดงสาขาที่สามารถรองรับลูกค้าได้มากกว่า 400 คนต่อวัน จะเขียนชุดคำสั่ง ดังนี้
ผลลัพธ์ที่ได้
| store_id | store_name | branch_type | daily_capacity |
|---|---|---|---|
| 2 | PiCha Siam Square | street | 450 |
| 6 | PiCha ICONSIAM | mall_flagship | 600 |
การจัดรูปแบบ SQL
แม้ภาษา SQL จะไม่สนใจเรื่องเว้นวรรคหรือขึ้นบรรทัดใหม่ แต่การเขียน SQL ให้อยู่ในรูปแบบที่เป็นระเบียบ อ่านง่ายช่วยให้คุณและทีมทำงานร่วมกันได้ดีขึ้น โดยเฉพาะเมื่อ query ยาวขึ้น เช่น
-- แบบบรรทัดเดียว (ถูกตามไวยากรณ์)
SELECT store_id, store_name, branch_type, daily_capacity FROM stores WHERE daily_capacity > 400;
-- แบบมีโครงสร้าง มีการขึ้นบรรทัดใหม่เพื่อแยกส่วนประกอบหลักของคำสั่ง
SELECT store_id, store_name, branch_type, daily_capacity
FROM stores
WHERE daily_capacity > 400;
-- แบบจัดให้แต่ละคอลัมน์มีการเยื้องเล็กน้อยและอยู่คนบรรทัด
SELECT
store_id,
store_name,
branch_type,
daily_capacity
FROM stores
WHERE daily_capacity > 400;รู้จักกับ DuckDB
DuckDB เป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์ที่ออกแบบมาให้เหมาะกับงานวิเคราะห์ข้อมูลเป็นหลัก โดยสามารถทำงานได้รวดเร็ว ติดตั้งง่าย และใช้งานผ่านคำสั่งในเทอร์มินัลได้ทันที จุดเด่นของ DuckDB คือไม่จำเป็นต้องติดตั้งเซิร์ฟเวอร์แยกต่างหากเหมือนฐานข้อมูลขนาดใหญ่ทั่ว ๆ ไป จึงเหมาะอย่างยิ่งสำหรับการเรียนการสอน การทดลองกับข้อมูล และการวิเคราะห์ข้อมูลบนเครื่องคอมพิวเตอร์ส่วนบุคคล
ลักษณะเด่นของ DuckDB คือ
- เป็นฐานข้อมูลเชิงสัมพันธ์แบบ open source ที่รองรับ SQL เต็มรูปแบบ
- ถูกออกแบบมาสำหรับงานวิเคราะห์ (OLAP) มากกว่างานระบบธุรกรรมขนาดใหญ่
- รันแบบ “ฝังในโปรแกรม” ได้ (in-process) หมายความว่าไม่ต้องตั้ง server แยก ไม่ต้องวุ่นกับการตั้งค่า IT
- ทำงานได้ดีกับไฟล์ข้อมูลอย่าง CSV, Excel, Parquet ทำให้คุณ “ดึงไฟล์มาแล้วเริ่มวิเคราะห์ได้เลย” บนเครื่องตัวเอง
เนื่องจากภาษา SQL มีคำสั่งส่วนใหญ่เป็นมาตรฐานสากล การฝึกทักษะ SQL จาก DuckDB จึงสามารถนำไปประยุกต์ใช้กับ RDBMS อื่น ๆ ได้
การติดตั้ง DuckDB บน Windows
ขั้นตอนที่ 1 เปิด Command Prompt
ให้เปิดโปรแกรม Command Prompt โดยมีขั้นตอนดังนี้
- กดปุ่ม Win + R บนแป้นพิมพ์
- จะปรากฏหน้าต่าง Run
- พิมพ์คำว่า
cmd - กดปุ่ม Enter
เมื่อทำตามขั้นตอนข้างต้นแล้ว หน้าต่าง Command Prompt จะเปิดขึ้น เพื่อให้ผู้เรียนสามารถพิมพ์คำสั่งสำหรับติดตั้งโปรแกรมได้
ขั้นตอนที่ 2 ติดตั้ง DuckDB
เมื่ออยู่ในหน้าต่าง Command Prompt แล้ว ให้พิมพ์คำสั่งต่อไปนี้ จากนั้นกด Enter
คำสั่งนี้จะสั่งให้ Windows ดาวน์โหลดและติดตั้งโปรแกรม DuckDB เวอร์ชันที่ใช้งานผ่านบรรทัดคำสั่ง หรือที่เรียกว่า CLI (Command Line Interface)
ขั้นตอนที่ 3 รอให้การติดตั้งเสร็จสมบูรณ์
หลังจากกด Enter ระบบจะเริ่มดำเนินการดังนี้
- ค้นหาแพ็กเกจ
DuckDB.cli - ดาวน์โหลดไฟล์ที่จำเป็น
- ติดตั้งโปรแกรมลงในเครื่อง
ผู้เรียนควรรอจนกว่ากระบวนการติดตั้งจะเสร็จสมบูรณ์ โดยระหว่างติดตั้งอาจมีข้อความสอบถามเพื่อยืนยันการดำเนินการ หากมี ให้พิมพ์ Y แล้วกด Enter
การติดตั้ง DuckDB บน macOS และ Linux
สำหรับผู้ใช้ระบบปฏิบัติการ macOS และ Linux สามารถติดตั้ง DuckDB ได้อย่างสะดวกผ่านคำสั่งในเทอร์มินัล โดยเริ่มจากเปิดโปรแกรม Terminal แล้วพิมพ์คำสั่งต่อไปนี้
คำสั่งนี้จะดาวน์โหลดและติดตั้งโปรแกรม DuckDB ลงในเครื่องโดยอัตโนมัติ
เมื่อติดตั้งเรียบร้อยแล้ว ควรตรวจสอบว่าโปรแกรมพร้อมใช้งาน โดยพิมพ์คำสั่งต่อไปนี้ในเทอร์มินัล
หากติดตั้งสำเร็จ ระบบจะเข้าสู่หน้าจอการทำงานของ DuckDB และพร้อมรับคำสั่งจากผู้ใช้ ซึ่งเป็นการยืนยันว่าโปรแกรมได้รับการติดตั้งอย่างถูกต้องแล้ว
ถ้าเห็น prompt ของ DuckDB memory D แปลว่าพร้อมแล้วสำหรับรับคำสั่งจากผู้ใช้ คุณสามารถลองพิมพ์คำสั่งเพื่อเช็คว่าระบบทำงานได้
จะได้ผลลัพธ์แสดงวันและเวลาปัจจุบันขณะที่รันคำสั่ง
┌───────────────────────────────┐
│ now() │
│ timestamp with time zone │
├───────────────────────────────┤
│ 2026-05-14 06:47:02.983405+07 │
└───────────────────────────────┘

เมื่อติดตั้ง DuckDB เรียบร้อยแล้ว ขั้นตอนต่อไปคือการเตรียมชุดข้อมูล PiCha เพื่อใช้ในการฝึกปฏิบัติ
การดาวน์โหลดและเตรียมชุดข้อมูล PiCha
เมื่อติดตั้ง DuckDB เรียบร้อยแล้ว ขั้นตอนถัดไปคือการดาวน์โหลดไฟล์ฐานข้อมูล picha.duckdb เพื่อใช้ในการฝึกปฏิบัติ ผู้เรียนสามารถดาวน์โหลดชุดข้อมูลได้จาก GitHub ที่ลิงก์ https://github.com/prasertcbs/picha/raw/refs/heads/main/picha.duckdb จากนั้นให้เอาไฟล์ picha.duckdb ที่เกี่ยวข้องไปเก็บไว้ในโฟลเดอร์เดียวกับที่ต้องการใช้ทำงานร่วมกับ DuckDB เพื่อให้สะดวกต่อการเรียกใช้งานในขั้นตอนถัดไป
หลังจากเตรียมไฟล์เรียบร้อยแล้ว ให้เปิดเทอร์มินัลหรือ Command Prompt ภายในโฟลเดอร์ทำงาน และพิมพ์คำสั่งต่อไปนี้
คำสั่งนี้ใช้สำหรับเปิดโปรแกรม DuckDB พร้อมกับเชื่อมต่อเข้ากับไฟล์ฐานข้อมูลชื่อ picha.duckdb ภายในโฟลเดอร์ปัจจุบัน หากไฟล์ดังกล่าวยังไม่มีอยู่ ระบบจะสร้างไฟล์ฐานข้อมูลใหม่ขึ้นมาโดยอัตโนมัติ เพื่อให้ผู้เรียนสามารถนำเข้าข้อมูลและเริ่มวิเคราะห์ข้อมูลได้ทันที
จากขั้นตอนนี้เป็นต้นไป ผู้เรียนจะสามารถดำเนินงานพื้นฐานกับฐานข้อมูลได้ เช่น เริ่มเขียนคำสั่ง SELECT เพื่อสำรวจข้อมูลและตั้งคำถามเชิงธุรกิจจากฐานข้อมูลจริง
รายละเอียดการเชื่อมต่อและคำสั่ง SQL ระดับลงมือปฏิบัติจะขยายในบทถัดไป บทนี้ต้องการเพียงให้คุณเห็นภาพรวมว่า “ฐานข้อมูลหน้าตาเป็นอย่างไร และ SQL จะช่วยคุณถามอะไรได้บ้าง”
สรุป
ในบทนี้ เราได้เริ่มต้นจากมุมมองของผู้บริหาร PiCha Tea House ที่ต้องตัดสินใจเกี่ยวกับสาขา เมนู ราคา และประสบการณ์ลูกค้า แล้วค่อย ๆ เชื่อมมาสู่การมองข้อมูลอย่างเป็นระบบผ่านแนวคิดของฐานข้อมูลเชิงสัมพันธ์และการใช้ SQL เป็นเครื่องมือในการเข้าถึงข้อมูลเหล่านั้น
อย่างไรก็ตาม การเขียน SQL แล้วได้ผลลัพธ์ออกมาไม่ได้หมายความว่างานวิเคราะห์เสร็จสมบูรณ์ เพราะผลลัพธ์ที่ได้ยังต้องผ่านกระบวนการตีความให้กลายเป็นข้อสรุปที่มีความหมายทางธุรกิจ และต่อยอดไปสู่ข้อเสนอเชิงกลยุทธ์ที่นำไปใช้ได้จริง กล่าวอีกอย่างหนึ่งคือ SQL ช่วยให้เรา “เห็นข้อมูล” แต่การวิเคราะห์ที่ดีต้องช่วยให้เรา “เข้าใจธุรกิจ” ด้วย
กรอบคิดอย่างง่ายในการตีความผลลัพธ์สามารถเริ่มต้นได้จาก 4 คำถามสำคัญต่อไปนี้
What – ข้อมูลบอกอะไร? อธิบายผลลัพธ์ที่เห็นอย่างตรงไปตรงมาและชัดเจน เช่น “ยอดขายเฉลี่ยต่อออเดอร์ของลูกค้า Gold อยู่ที่ 220 บาท สูงกว่าลูกค้า Bronze ที่มีค่าเฉลี่ย 150 บาท”
Why – ทำไมจึงเป็นเช่นนั้น? พิจารณาปัจจัยที่อาจอธิบายผลลัพธ์นั้นได้ เช่น “ลูกค้า Gold อาจมีความภักดีต่อแบรนด์สูงกว่า ได้รับสิทธิประโยชน์มากกว่า หรือมีแนวโน้มเลือกซื้อสินค้าที่มีมูลค่าสูงกว่า”
So What – แล้วเรื่องนี้สำคัญต่อธุรกิจอย่างไร? เชื่อมผลลัพธ์เข้ากับเป้าหมายทางธุรกิจ เช่น “หากธุรกิจสามารถเพิ่มสัดส่วนลูกค้าที่ขยับจาก Bronze ไปเป็น Gold ได้มากขึ้น ก็อาจช่วยเพิ่มรายได้เฉลี่ยต่อคนได้”
Now What – แล้วควรทำอะไรต่อ? เสนอแนวทางปฏิบัติที่จับต้องได้ เช่น “ออกแคมเปญกระตุ้นการเลื่อนระดับสมาชิกสำหรับลูกค้า Bronze ที่มียอดซื้อสะสมเกินเกณฑ์ เพื่อผลักดันให้ขึ้นเป็น Silver หรือ Gold”
เมื่อใช้กรอบคิดนี้ร่วมกับ SQL เราจะไม่หยุดอยู่แค่การดึงข้อมูลหรือสรุปตัวเลข แต่จะสามารถเปลี่ยนผลลัพธ์จากฐานข้อมูลให้กลายเป็นข้อเสนอที่สนับสนุนการตัดสินใจทางธุรกิจได้อย่างมีเหตุผลมากขึ้น
ในบทถัดไป คุณจะได้เริ่มลงมือใช้ SQL กับฐานข้อมูล PiCha อย่างเป็นรูปธรรมมากขึ้น ตั้งแต่คำสั่ง SELECT พื้นฐาน ไปจนถึงการดึงข้อมูลจากหลายตารางเพื่อช่วยตอบคำถามเชิงกลยุทธ์ที่ซับซ้อนยิ่งขึ้น
คำถามท้ายบท
- อธิบายว่า “การวิเคราะห์ข้อมูล (Data Analytics)” คืออะไร โดยใช้ภาษาของผู้บริหารที่ต้องตอบโจทย์ธุรกิจในชีวิตจริง และยกตัวอย่างอย่างน้อย 2 กรณีที่ Data Analytics ช่วยให้ PiCha ตัดสินใจเรื่องกลยุทธ์ได้ดีขึ้น
- จากมุมมองของผู้จัดการฝ่ายการตลาดของ PiCha เลือก “คำถามทางธุรกิจ” ที่คุณคิดว่าสำคัญมา 2 ข้อ (เช่น จะเปิดสาขาใหม่ที่ไหน ควรเน้นเมนูใดสำหรับ delivery) แล้วอธิบายว่าคุณอยากเห็นข้อมูลประเภทใดบ้างบนแดชบอร์ดเพื่อช่วยตอบคำถามเหล่านั้น
- ในฐานะผู้บริหาร ทำไม SQL จึงถูกมองว่าเป็น “ภาษากลาง” ของการวิเคราะห์ข้อมูลในองค์กรธุรกิจ อธิบายอย่างน้อย 3 เหตุผล โดยเชื่อมโยงกับการทำงานร่วมกันระหว่างฝ่ายธุรกิจ ฝ่ายวิเคราะห์ และฝ่ายเทคนิค