0Pricing
SQL Academy · บทเรียน

การจัดกลุ่มช่วงและติดป้ายข้อมูล

เปลี่ยนค่าให้เป็นหมวดหมู่

การจัดกลุ่มช่วงและติดป้ายข้อมูล เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

การแบ่งค่าเป็นกลุ่มคืออะไร

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

แทนที่จะแสดงคะแนน 87 คุณจะแสดง "ดี" แทนที่จะแสดงอายุ 14 คุณจะแสดง "วัยรุ่น" นิพจน์ CASE คือเครื่องมือหลักสำหรับงานนี้

ตารางตัวอย่าง: คำสั่งซื้อ

เราจะใช้ตาราง คำสั่งซื้อ ตลอดบทเรียนนี้ แต่ละแถวมีจำนวนเงินของคำสั่งซื้อและรหัสสถานะ

เรียกใช้คำสั่งสอบถามด้านล่างเพื่อดูข้อมูลที่เรากำลังใช้งาน

SELECT id, customer, amount, status
FROM orders
ORDER BY id;

การกำหนดป้ายกำกับด้วย CASE WHEN

รูปแบบการแบ่งค่าเป็นกลุ่มที่ง่ายที่สุดคือการตรวจสอบเงื่อนไขและกำหนดป้ายกำกับ บล็อก CASE WHEN ... THEN ... ELSE ... END จะส่งคืนข้อความใหม่สำหรับแต่ละแถว

ในที่นี้ เรากำหนดป้ายกำกับให้คำสั่งซื้อแต่ละรายการเป็น 'ใหญ่' หรือ 'เล็ก' ตามจำนวนเงิน

SELECT id,
       amount,
       CASE
         WHEN amount >= 500 THEN 'Large'
         ELSE 'Small'
       END AS order_size
FROM orders;

หลายกลุ่มด้วยชุด WHEN

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

ตัวอย่างนี้แบ่งจำนวนเงินออกเป็นสามระดับ: เล็ก, ปานกลาง และ ใหญ่

SELECT id,
       amount,
       CASE
         WHEN amount < 100  THEN 'Small'
         WHEN amount < 500  THEN 'Medium'
         ELSE 'Large'
       END AS order_tier
FROM orders;

การแบ่งค่าข้อความเป็นกลุ่ม

การแบ่งค่าเป็นกลุ่มไม่ได้จำกัดเฉพาะตัวเลข คุณสามารถจับคู่ค่าข้อความที่ตรงกันทุกประการ แล้วแทนที่ด้วยป้ายกำกับที่อ่านเข้าใจได้ง่ายกว่า

ในที่นี้ รหัสสถานะดิบ 'P', 'S' และ 'C' จะกลายเป็นคำที่อ่านเข้าใจได้

SELECT id,
       status,
       CASE status
         WHEN 'P' THEN 'Pending'
         WHEN 'S' THEN 'Shipped'
         WHEN 'C' THEN 'Cancelled'
         ELSE 'Unknown'
       END AS status_label
FROM orders;

การใช้รูปแบบ CASE แบบง่าย

เมื่อคุณเปรียบเทียบคอลัมน์เดียวกับค่าที่กำหนดไว้หลายค่า รูปแบบ CASE แบบง่าย (CASE column WHEN value ...) จะสั้นและอ่านง่ายกว่าการเขียนชื่อคอลัมน์ซ้ำในส่วนคำสั่ง WHEN ทุกส่วน

ผลลัพธ์เหมือนกับรูปแบบแบบค้นหา

SELECT id,
       CASE status
         WHEN 'P' THEN 'Pending'
         WHEN 'S' THEN 'Shipped'
         WHEN 'C' THEN 'Cancelled'
         ELSE 'Unknown'
       END AS status_label
FROM orders;

การแบ่งค่าเป็นกลุ่มภายใน GROUP BY

เมื่อมีป้ายกำกับกลุ่มแล้ว คุณสามารถจัดกลุ่มตามป้ายกำกับนั้นเพื่อนับจำนวนแถวในแต่ละหมวดหมู่ได้ โดยครอบนิพจน์ CASE ทั้งหมดไว้ภายใน GROUP BY

คำสั่งสอบถามนี้แสดงจำนวนคำสั่งซื้อที่มีขนาดเล็ก ปานกลาง หรือใหญ่

SELECT
  CASE
    WHEN amount < 100  THEN 'Small'
    WHEN amount < 500  THEN 'Medium'
    ELSE 'Large'
  END AS order_tier,
  COUNT(*) AS total_orders
FROM orders
GROUP BY
  CASE
    WHEN amount < 100  THEN 'Small'
    WHEN amount < 500  THEN 'Medium'
    ELSE 'Large'
  END;

การแบ่งค่าเป็นกลุ่มด้วยชื่อแทนของแบบสอบถามย่อย

การเขียนบล็อก CASE ยาว ๆ ซ้ำใน GROUP BY ทำให้โค้ดดูยืดยาว วิธีที่สะอาดกว่าคือครอบคำสั่งสอบถามหลักไว้ในแบบสอบถามย่อย (หรือ CTE) เพื่อให้อ้างอิงชื่อแทนได้โดยตรง

SELECT order_tier, COUNT(*) AS total_orders
FROM (
  SELECT
    CASE
      WHEN amount < 100  THEN 'Small'
      WHEN amount < 500  THEN 'Medium'
      ELSE 'Large'
    END AS order_tier
  FROM orders
) AS bucketed
GROUP BY order_tier;

กลุ่มตัวเลข: ช่วงอายุ

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

สังเกตว่าเงื่อนไขเรียงจากค่าน้อยไปหาค่ามาก — เอสคิวแอลจะหยุดที่ WHEN แรกที่เป็นจริง ดังนั้นลำดับจึงมีความสำคัญ

SELECT name,
       age,
       CASE
         WHEN age < 13 THEN 'Child'
         WHEN age < 18 THEN 'Teen'
         WHEN age < 65 THEN 'Adult'
         ELSE 'Senior'
       END AS age_group
FROM customers;

การกำหนดป้ายกำกับให้ NULL ในกลุ่ม

หากค่าเป็น NULL จะไม่มีเงื่อนไข WHEN ใด ๆ (นอกเหนือจาก IS NULL) ที่ตรงกับค่านั้นได้ หากไม่มีการตรวจสอบอย่างชัดเจน ค่า NULL จะไหลไปยังแขนง ELSE

เพิ่มส่วนคำสั่ง WHEN column IS NULL เพื่อกำหนดป้ายกำกับเฉพาะให้ค่า NULL

SELECT id,
       amount,
       CASE
         WHEN amount IS NULL THEN 'No Data'
         WHEN amount < 100   THEN 'Small'
         WHEN amount < 500   THEN 'Medium'
         ELSE 'Large'
       END AS order_tier
FROM orders;

การแบ่งค่าเป็นกลุ่มใน ORDER BY

คุณยังสามารถใช้นิพจน์ CASE โดยตรงภายใน ORDER BY เพื่อควบคุมลำดับความสำคัญในการเรียง โดยไม่ต้องเพิ่มคอลัมน์ใหม่

ตัวอย่างด้านล่างจะแสดงคำสั่งซื้อที่รอดำเนินการก่อนเสมอ จากนั้นจึงเป็นคำสั่งซื้อที่จัดส่งแล้ว และคำสั่งซื้อที่ยกเลิกแล้ว

SELECT id, customer, status
FROM orders
ORDER BY
  CASE status
    WHEN 'P' THEN 1
    WHEN 'S' THEN 2
    WHEN 'C' THEN 3
    ELSE 4
  END;

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจของคุณเกี่ยวกับการแบ่งค่าเป็นกลุ่มและการกำหนดป้ายกำกับให้ข้อมูลด้วย CASE

ทบทวนบทเรียน

ทำได้ดีมาก! นี่คือสิ่งที่คุณได้เรียนรู้เกี่ยวกับการแบ่งค่าเป็นกลุ่มและการกำหนดป้ายกำกับให้ข้อมูล:

  • การแบ่งค่าเป็นกลุ่มจะแปลงค่าดิบเป็นหมวดหมู่ที่มีชื่อกำกับโดยใช้ CASE WHEN
  • ชุดแขนง WHEN ช่วยสร้างกลุ่มหลายกลุ่ม โดยเอสคิวแอลจะหยุดที่รายการแรกที่ตรงกัน
  • รูปแบบ CASE แบบง่าย (CASE col WHEN val) เหมาะอย่างยิ่งเมื่อเปรียบเทียบคอลัมน์เดียวกับค่าที่กำหนดไว้
  • คุณสามารถใช้ GROUP BY กับนิพจน์ CASE เพื่อนับแถวในแต่ละกลุ่ม
  • จัดการ NULL อย่างชัดเจนเสมอด้วย WHEN col IS NULL เพื่อให้ได้รับป้ายกำกับที่มีความหมาย
  • CASE ยังใช้ภายใน ORDER BY เพื่อกำหนดลำดับความสำคัญในการเรียงแบบกำหนดเองได้

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

คำถามที่พบบ่อย

บทเรียน “การจัดกลุ่มช่วงและติดป้ายข้อมูล” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การจัดกลุ่มช่วงและติดป้ายข้อมูล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การจัดกลุ่มช่วงและติดป้ายข้อมูล”

เปลี่ยนค่าให้เป็นหมวดหมู่ คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “การจัดกลุ่มช่วงและติดป้ายข้อมูล” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. นิพจน์ CASE
  2. CASE แบบค้นหาเทียบกับแบบง่าย
  3. การจัดกลุ่มช่วงและติดป้ายข้อมูล
  4. CASE ใน ORDER BY และการรวมค่า
← กลับไปที่ SQL Academy