0Pricing
SQL Interview Prep · บทเรียน

นิพจน์ CASE ใน SELECT

เขียนตรรกะเงื่อนไขแบบแทรกในคิวรี และรูปแบบ CASE แบบค้นหากับแบบพื้นฐาน

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

CASE: นิพจน์เงื่อนไขของ SQL

CASE คือโครงสร้างถ้า/แล้ว/มิฉะนั้นของ SQL แต่เป็นนิพจน์ที่คืนค่าหนึ่งค่า จึงใช้ได้ทุกที่ที่รับค่าได้ เช่น SELECT, WHERE, ORDER BY หรือแม้แต่ภายในฟังก์ชันรวม

SELECT order_id,
       amount,
       CASE WHEN amount > 100 THEN 'large' ELSE 'small' END AS size
FROM orders;

รูปแบบ CASE แบบค้นหา

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

SELECT score,
       CASE
         WHEN score >= 90 THEN 'A'
         WHEN score >= 80 THEN 'B'
         WHEN score >= 70 THEN 'C'
         ELSE 'F'
       END AS grade
FROM exam_results;

รูปแบบ CASE แบบง่าย

CASE แบบง่ายจะเปรียบเทียบนิพจน์หนึ่งรายการกับรายการค่าต่าง ๆ รูปแบบนี้สั้นกว่าเมื่อใช้ตรวจสอบความเท่ากัน แต่ไม่สามารถตรวจสอบช่วงค่าหรือค่า NULL ได้

SELECT status_code,
       CASE status_code
         WHEN 1 THEN 'active'
         WHEN 2 THEN 'paused'
         WHEN 3 THEN 'closed'
         ELSE 'unknown'
       END AS status_label
FROM accounts;

แบบค้นหากับแบบง่าย: ควรใช้เมื่อใด

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

-- Simple CASE will NOT catch NULL here
SELECT CASE WHEN bonus IS NULL THEN 'no bonus'
            ELSE 'has bonus'
       END AS bonus_flag
FROM employees;

ลำดับของแขนง WHEN มีความสำคัญ

เนื่องจากแขนงแรกที่ตรงกันจะเป็นผู้ชนะ ควร เรียง WHEN จากเงื่อนไขที่เฉพาะเจาะจงที่สุดไปยังเงื่อนไขที่กว้างที่สุด หากวางเกณฑ์ที่กว้างไว้ก่อน คะแนน 95 อาจถูกจัดป้ายกำกับผิด

-- Correct order: highest threshold first
SELECT CASE
         WHEN score >= 90 THEN 'A'
         WHEN score >= 80 THEN 'B'
         ELSE 'C or below'
       END AS grade
FROM exam_results;

ELSE และค่า NULL โดยปริยาย

หากไม่มีรายการใดตรงกันและคุณละเว้น ELSE CASE จะคืนค่า NULL ควรเพิ่ม ELSE อย่างชัดเจนเพื่อกำหนดค่าเริ่มต้น ป้องกันไม่ให้ค่าที่ไม่คาดคิดกลายเป็น NULL โดยไม่มีการแจ้งเตือน

-- No ELSE: anything not 1/2 becomes NULL
SELECT CASE flag WHEN 1 THEN 'yes' WHEN 2 THEN 'no' END AS label
FROM toggles;

การรวมผลตามเงื่อนไข (รูปแบบตารางสรุป)

เทคนิคที่มีประโยชน์ที่สุดในการสัมภาษณ์คือ การรวมผลตามเงื่อนไข ใส่ CASE ไว้ภายใน SUM หรือ COUNT เพื่อนับแถวตามหมวดหมู่ในการประมวลผลครั้งเดียว ทำให้ได้รายงานในรูปแบบตารางสรุปที่เป็นระเบียบ

SELECT
  SUM(CASE WHEN status = 'paid'    THEN 1 ELSE 0 END) AS paid_orders,
  SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending_orders,
  SUM(CASE WHEN status = 'paid'    THEN amount ELSE 0 END) AS paid_revenue
FROM orders;

COUNT ไม่สนใจ NULL: ทางลัดด้วย CASE

เนื่องจาก COUNT ไม่สนใจค่า NULL คุณจึงละเว้น ELSE ได้ ทำให้แถวที่ไม่ตรงเงื่อนไขกลายเป็น NULL และไม่ถูกนับ นี่เป็นวิธีที่สั้นลงเล็กน้อยสำหรับการนับตามเงื่อนไข

SELECT
  COUNT(CASE WHEN status = 'paid' THEN 1 END)    AS paid_orders,
  COUNT(CASE WHEN status = 'pending' THEN 1 END) AS pending_orders
FROM orders;

ใช้ CASE ใน ORDER BY เพื่อเรียงลำดับแบบกำหนดเอง

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

SELECT order_id, status
FROM orders
ORDER BY
  CASE status
    WHEN 'urgent' THEN 1
    WHEN 'normal' THEN 2
    ELSE 3
  END,
  order_id;

ชนิดข้อมูลต้องสอดคล้องกันในทุกแขนง

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

-- Keep branches the same type
SELECT CASE WHEN qty > 0 THEN CAST(qty AS VARCHAR)
            ELSE 'none'
       END AS qty_label
FROM inventory;

ใช้ CASE ใน WHERE เพื่อกรองตามเงื่อนไข

CASE ใน WHERE ช่วยให้ใช้ตรรกะการกรองที่แตกต่างกันตามค่าแฟล็กได้ เช่น ใช้เกณฑ์ราคาที่แตกต่างกันในแต่ละภูมิภาค วิธีนี้มักอ่านง่ายกว่าการพันกันของ AND และ OR

SELECT order_id, amount, region
FROM orders
WHERE amount > CASE region
                 WHEN 'US'  THEN 100
                 WHEN 'EU'  THEN 90
                 ELSE 50
               END;

ตรวจสอบอย่างรวดเร็ว

คาดการณ์ผลลัพธ์

สรุปทบทวน

สรุป: CASE คืนค่าหนึ่งค่าและใช้ได้ใน SELECT, WHERE, ORDER BY และฟังก์ชันรวม CASE แบบค้นหาใช้กับช่วงค่าและ NULL ได้ เงื่อนไขแรกที่ตรงกันจะเป็นผู้ชนะ หากไม่มีรายการตรงกันจะได้ NULL และชนิดข้อมูลของทุกแขนงต้องเข้ากันได้

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

บทเรียน “นิพจน์ CASE ใน SELECT” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “นิพจน์ CASE ใน SELECT”

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

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

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

บทเรียน “นิพจน์ CASE ใน SELECT” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การเลือกคอลัมน์และข้อผิดพลาดของนามแฝง
  2. คอลัมน์คำนวณและลำดับความสำคัญของนิพจน์
  3. DISTINCT เทียบกับ GROUP BY เพื่อหาค่าที่ไม่ซ้ำกัน
  4. นิพจน์ CASE ใน SELECT
← กลับไปที่ SQL Interview Prep