1. SQL สำหรับการวิเคราะห์ข้อมูลธุรกิจ

วัตถุประสงค์การเรียนรู้

เมื่อจบบทนี้ ผู้เรียนจะสามารถ

  1. อธิบายบทบาทและความสำคัญของการวิเคราะห์ข้อมูลในการวางกลยุทธ์ทางธุรกิจสมัยใหม่
  2. ทำความเข้าใจโครงสร้างของฐานข้อมูลเชิงสัมพันธ์ที่ใช้ในธุรกิจ ผ่านตัวอย่างฐานข้อมูล PiCha
  3. ระบุองค์ประกอบสำคัญของฐานข้อมูล 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 ประเภท

  1. เกิดอะไรขึ้น? (Descriptive Analytics) ใช้เพื่ออธิบายภาพอดีตถึงปัจจุบัน เช่น
    • “ยอดขายเฉลี่ยต่อวันของแต่ละสาขาเป็นเท่าไร?”
    • “ลูกค้า PiCha Tea House ส่วนใหญ่อยู่ในกลุ่มอายุใด?” ที่ระดับนี้ ผู้บริหารกำลังมอง “แดชบอร์ดภาพรวมธุรกิจ” เพื่อรู้สถานะปัจจุบัน
  2. ทำไมถึงเกิด? (Diagnostic Analytics) ใช้เพื่อเจาะลึกสาเหตุเบื้องหลังตัวเลข เช่น
    • “ทำไมยอดขายเมนูชาผลไม้เพิ่มขึ้นในช่วงฤดูร้อน?”
    • “ทำไมสาขา ICONSIAM จึงมีคะแนนความพึงพอใจต่ำในช่วงเย็น?” ในขั้นนี้ ผู้บริหารเริ่มเชื่อมโยงตัวเลขกับบริบท เช่น สถานที่ เวลา โปรโมชั่น ความหนาแน่นของลูกค้า
  3. จะเกิดอะไรขึ้นต่อไป? (Predictive Analytics) ใช้เทคนิคสถิติและ machine learning เพื่อคาดการณ์อนาคต เช่น
    • “กลุ่มลูกค้าไหนมีแนวโน้มจะซื้อซ้ำมากที่สุด?”
    • “ความต้องการในไตรมาสหน้ามีแนวโน้มเป็นอย่างไร?” สำหรับผู้บริหาร นี่คือพื้นฐานของการวางแผนล่วงหน้าอย่างมีหลักฐานรองรับ
  4. ควรทำอะไร? (Prescriptive Analytics) ใช้ insights และอัลกอริทึมเพื่อเสนอ “ทางเลือกในการลงมือทำ” ที่เหมาะสมที่สุด เช่น
    • “ควรวางโปรโมชันแบบใดในช่วงเวลาที่ลูกค้าเบาบางเพื่อให้รายได้รวมทั้งวันสูงที่สุด?”
    • “ควรเลือกลงทุนระหว่างขยายสาขาหรือเพิ่มที่นั่ง ทางเลือกใดจะทำให้ธุรกิจได้ผลตอบแทนสูงกว่ากัน?”

ในทางปฏิบัติ ขั้นตอนเหล่านี้มักเชื่อมต่อกัน เช่น ที่ PiCha ผู้จัดการอาจเริ่มจาก Descriptive ว่า “สาขาไหนขายดีที่สุด” จากนั้นใช้ Diagnostic เพื่อหาสาเหตุ เช่น ทำเล ลูกค้าประเภทใด เมนูอะไรที่ดึงยอดขาย แล้วจึงใช้ Predictive/Prescriptive เพื่อวางแผนการขยายสาขาหรือปรับ mix เมนูในอนาคต

สำหรับ PiCha การทำความเข้าใจพฤติกรรมการซื้อและปัจจัยที่ผลักดันการตัดสินใจของลูกค้ากลุ่มต่าง ๆ ช่วยให้ทีมงานตัดสินใจได้ตั้งแต่การเลือกเมนูพระเอกของแบรนด์ การตั้งราคา ไปจนถึงการเลือกทำเลของสาขาใหม่

จากข้อมูลดิบสู่ข้อมูลเชิงลึกที่นำไปปฏิบัติได้

โดยทั่วไปเราจะแบ่งขั้นตอนในการวิเคราะห์ข้อมูลออกเป็น 4 ขั้น ดังนี้

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

ขั้นตอนที่ 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 MondaySunday ชื่อวันในสัปดาห์
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 เป็นคีย์หลักของตาราง customers
  • store_id เป็นคีย์หลักของตาราง stores
  • sku_id เป็นคีย์หลักของตาราง menus
  • transaction_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

  1. Create (INSERT) – เพิ่มข้อมูลใหม่ เช่น บันทึกธุรกรรมใหม่
  2. Read (SELECT) – ดึงข้อมูลมาวิเคราะห์ ซึ่งเป็นเนื้อหาหลักของตำราเล่มนี้
  3. Update (UPDATE) – แก้ไขข้อมูลเดิม
  4. Delete (DELETE) – ลบข้อมูล

โครงสร้างพื้นฐานของคำสั่ง SQL

คำสั่ง SELECT แบบพื้นฐานมีส่วนประกอบดังนี้

SELECT คอลัมน์ที่ต้องการ
FROM ตารางที่เก็บข้อมูล
WHERE เงื่อนไขการกรองข้อมูล;

ตัวอย่างเช่น หากคุณต้องการแสดงสาขาที่สามารถรองรับลูกค้าได้มากกว่า 400 คนต่อวัน จะเขียนชุดคำสั่ง ดังนี้

SELECT store_id, store_name, branch_type, daily_capacity -- คอลัมน์ที่ต้องการ
FROM stores -- ตารางที่เก็บข้อมูล
WHERE daily_capacity > 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 โดยมีขั้นตอนดังนี้

  1. กดปุ่ม Win + R บนแป้นพิมพ์
  2. จะปรากฏหน้าต่าง Run
  3. พิมพ์คำว่า cmd
  4. กดปุ่ม Enter

เมื่อทำตามขั้นตอนข้างต้นแล้ว หน้าต่าง Command Prompt จะเปิดขึ้น เพื่อให้ผู้เรียนสามารถพิมพ์คำสั่งสำหรับติดตั้งโปรแกรมได้

ขั้นตอนที่ 2 ติดตั้ง DuckDB

เมื่ออยู่ในหน้าต่าง Command Prompt แล้ว ให้พิมพ์คำสั่งต่อไปนี้ จากนั้นกด Enter

winget install DuckDB.cli

คำสั่งนี้จะสั่งให้ Windows ดาวน์โหลดและติดตั้งโปรแกรม DuckDB เวอร์ชันที่ใช้งานผ่านบรรทัดคำสั่ง หรือที่เรียกว่า CLI (Command Line Interface)

ขั้นตอนที่ 3 รอให้การติดตั้งเสร็จสมบูรณ์

หลังจากกด Enter ระบบจะเริ่มดำเนินการดังนี้

  • ค้นหาแพ็กเกจ DuckDB.cli
  • ดาวน์โหลดไฟล์ที่จำเป็น
  • ติดตั้งโปรแกรมลงในเครื่อง

ผู้เรียนควรรอจนกว่ากระบวนการติดตั้งจะเสร็จสมบูรณ์ โดยระหว่างติดตั้งอาจมีข้อความสอบถามเพื่อยืนยันการดำเนินการ หากมี ให้พิมพ์ Y แล้วกด Enter

การติดตั้ง DuckDB บน macOS และ Linux

สำหรับผู้ใช้ระบบปฏิบัติการ macOS และ Linux สามารถติดตั้ง DuckDB ได้อย่างสะดวกผ่านคำสั่งในเทอร์มินัล โดยเริ่มจากเปิดโปรแกรม Terminal แล้วพิมพ์คำสั่งต่อไปนี้

curl https://install.duckdb.org | sh

คำสั่งนี้จะดาวน์โหลดและติดตั้งโปรแกรม DuckDB ลงในเครื่องโดยอัตโนมัติ

เมื่อติดตั้งเรียบร้อยแล้ว ควรตรวจสอบว่าโปรแกรมพร้อมใช้งาน โดยพิมพ์คำสั่งต่อไปนี้ในเทอร์มินัล

duckdb

หากติดตั้งสำเร็จ ระบบจะเข้าสู่หน้าจอการทำงานของ DuckDB และพร้อมรับคำสั่งจากผู้ใช้ ซึ่งเป็นการยืนยันว่าโปรแกรมได้รับการติดตั้งอย่างถูกต้องแล้ว

ถ้าเห็น prompt ของ DuckDB memory D แปลว่าพร้อมแล้วสำหรับรับคำสั่งจากผู้ใช้ คุณสามารถลองพิมพ์คำสั่งเพื่อเช็คว่าระบบทำงานได้

SELECT now();

จะได้ผลลัพธ์แสดงวันและเวลาปัจจุบันขณะที่รันคำสั่ง

┌───────────────────────────────┐
│             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

คำสั่งนี้ใช้สำหรับเปิดโปรแกรม DuckDB พร้อมกับเชื่อมต่อเข้ากับไฟล์ฐานข้อมูลชื่อ picha.duckdb ภายในโฟลเดอร์ปัจจุบัน หากไฟล์ดังกล่าวยังไม่มีอยู่ ระบบจะสร้างไฟล์ฐานข้อมูลใหม่ขึ้นมาโดยอัตโนมัติ เพื่อให้ผู้เรียนสามารถนำเข้าข้อมูลและเริ่มวิเคราะห์ข้อมูลได้ทันที

จากขั้นตอนนี้เป็นต้นไป ผู้เรียนจะสามารถดำเนินงานพื้นฐานกับฐานข้อมูลได้ เช่น เริ่มเขียนคำสั่ง SELECT เพื่อสำรวจข้อมูลและตั้งคำถามเชิงธุรกิจจากฐานข้อมูลจริง

รายละเอียดการเชื่อมต่อและคำสั่ง SQL ระดับลงมือปฏิบัติจะขยายในบทถัดไป บทนี้ต้องการเพียงให้คุณเห็นภาพรวมว่า “ฐานข้อมูลหน้าตาเป็นอย่างไร และ SQL จะช่วยคุณถามอะไรได้บ้าง”

สรุป

ในบทนี้ เราได้เริ่มต้นจากมุมมองของผู้บริหาร PiCha Tea House ที่ต้องตัดสินใจเกี่ยวกับสาขา เมนู ราคา และประสบการณ์ลูกค้า แล้วค่อย ๆ เชื่อมมาสู่การมองข้อมูลอย่างเป็นระบบผ่านแนวคิดของฐานข้อมูลเชิงสัมพันธ์และการใช้ SQL เป็นเครื่องมือในการเข้าถึงข้อมูลเหล่านั้น

อย่างไรก็ตาม การเขียน SQL แล้วได้ผลลัพธ์ออกมาไม่ได้หมายความว่างานวิเคราะห์เสร็จสมบูรณ์ เพราะผลลัพธ์ที่ได้ยังต้องผ่านกระบวนการตีความให้กลายเป็นข้อสรุปที่มีความหมายทางธุรกิจ และต่อยอดไปสู่ข้อเสนอเชิงกลยุทธ์ที่นำไปใช้ได้จริง กล่าวอีกอย่างหนึ่งคือ SQL ช่วยให้เรา “เห็นข้อมูล” แต่การวิเคราะห์ที่ดีต้องช่วยให้เรา “เข้าใจธุรกิจ” ด้วย

กรอบคิดอย่างง่ายในการตีความผลลัพธ์สามารถเริ่มต้นได้จาก 4 คำถามสำคัญต่อไปนี้

  1. What – ข้อมูลบอกอะไร? อธิบายผลลัพธ์ที่เห็นอย่างตรงไปตรงมาและชัดเจน เช่น “ยอดขายเฉลี่ยต่อออเดอร์ของลูกค้า Gold อยู่ที่ 220 บาท สูงกว่าลูกค้า Bronze ที่มีค่าเฉลี่ย 150 บาท”

  2. Why – ทำไมจึงเป็นเช่นนั้น? พิจารณาปัจจัยที่อาจอธิบายผลลัพธ์นั้นได้ เช่น “ลูกค้า Gold อาจมีความภักดีต่อแบรนด์สูงกว่า ได้รับสิทธิประโยชน์มากกว่า หรือมีแนวโน้มเลือกซื้อสินค้าที่มีมูลค่าสูงกว่า”

  3. So What – แล้วเรื่องนี้สำคัญต่อธุรกิจอย่างไร? เชื่อมผลลัพธ์เข้ากับเป้าหมายทางธุรกิจ เช่น “หากธุรกิจสามารถเพิ่มสัดส่วนลูกค้าที่ขยับจาก Bronze ไปเป็น Gold ได้มากขึ้น ก็อาจช่วยเพิ่มรายได้เฉลี่ยต่อคนได้”

  4. Now What – แล้วควรทำอะไรต่อ? เสนอแนวทางปฏิบัติที่จับต้องได้ เช่น “ออกแคมเปญกระตุ้นการเลื่อนระดับสมาชิกสำหรับลูกค้า Bronze ที่มียอดซื้อสะสมเกินเกณฑ์ เพื่อผลักดันให้ขึ้นเป็น Silver หรือ Gold”

เมื่อใช้กรอบคิดนี้ร่วมกับ SQL เราจะไม่หยุดอยู่แค่การดึงข้อมูลหรือสรุปตัวเลข แต่จะสามารถเปลี่ยนผลลัพธ์จากฐานข้อมูลให้กลายเป็นข้อเสนอที่สนับสนุนการตัดสินใจทางธุรกิจได้อย่างมีเหตุผลมากขึ้น

ในบทถัดไป คุณจะได้เริ่มลงมือใช้ SQL กับฐานข้อมูล PiCha อย่างเป็นรูปธรรมมากขึ้น ตั้งแต่คำสั่ง SELECT พื้นฐาน ไปจนถึงการดึงข้อมูลจากหลายตารางเพื่อช่วยตอบคำถามเชิงกลยุทธ์ที่ซับซ้อนยิ่งขึ้น

คำถามท้ายบท

  1. อธิบายว่า “การวิเคราะห์ข้อมูล (Data Analytics)” คืออะไร โดยใช้ภาษาของผู้บริหารที่ต้องตอบโจทย์ธุรกิจในชีวิตจริง และยกตัวอย่างอย่างน้อย 2 กรณีที่ Data Analytics ช่วยให้ PiCha ตัดสินใจเรื่องกลยุทธ์ได้ดีขึ้น
  2. จากมุมมองของผู้จัดการฝ่ายการตลาดของ PiCha เลือก “คำถามทางธุรกิจ” ที่คุณคิดว่าสำคัญมา 2 ข้อ (เช่น จะเปิดสาขาใหม่ที่ไหน ควรเน้นเมนูใดสำหรับ delivery) แล้วอธิบายว่าคุณอยากเห็นข้อมูลประเภทใดบ้างบนแดชบอร์ดเพื่อช่วยตอบคำถามเหล่านั้น
  3. ในฐานะผู้บริหาร ทำไม SQL จึงถูกมองว่าเป็น “ภาษากลาง” ของการวิเคราะห์ข้อมูลในองค์กรธุรกิจ อธิบายอย่างน้อย 3 เหตุผล โดยเชื่อมโยงกับการทำงานร่วมกันระหว่างฝ่ายธุรกิจ ฝ่ายวิเคราะห์ และฝ่ายเทคนิค