นิพจน์ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเลือกคอลัมน์และข้อผิดพลาดของนามแฝง
- คอลัมน์คำนวณและลำดับความสำคัญของนิพจน์
- DISTINCT เทียบกับ GROUP BY เพื่อหาค่าที่ไม่ซ้ำกัน
- นิพจน์ CASE ใน SELECT