นิพจน์ CASE และคำค้นแบบ Pivot
ใช้ CASE WHEN ภายในฟังก์ชันรวม เพื่อแปลงตารางแนวตั้งเป็นรายงานตารางไขว้แนวนอน
นิพจน์ CASE และคำค้นแบบ Pivot เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
CASE: If/Else แบบแทรกใน SQL
CASE คือการเขียนเงื่อนไขสามทางของ SQL มีสองรูปแบบ:
-- Searched CASE
CASE WHEN x > 0 THEN 'positive'
WHEN x < 0 THEN 'negative'
ELSE 'zero' END
-- Simple CASE
CASE status
WHEN 'A' THEN 'active'
WHEN 'P' THEN 'pending'
ELSE 'unknown'
ENDCASE ใน SELECT
คำนวณคอลัมน์ที่สร้างขึ้น:
SELECT id, total,
CASE
WHEN total >= 1000 THEN 'whale'
WHEN total >= 100 THEN 'regular'
ELSE 'small'
END AS bucket
FROM orders;CASE ใน WHERE และ ORDER BY
การกรองและการจัดลำดับแบบกำหนดเอง:
-- Custom sort:
ORDER BY
CASE WHEN status = 'urgent' THEN 0 ELSE 1 END,
created_at DESC;
-- Conditional filter:
WHERE CASE WHEN $1 = 'paid' THEN status = 'paid'
ELSE status IN ('pending','paid')
END;CASE ภายในฟังก์ชันรวม: การนับตามเงื่อนไข
เทคนิคการทำ pivot แบบคลาสสิก:
SELECT user_id,
COUNT(*) AS total,
SUM(CASE WHEN status = 'paid' THEN 1 ELSE 0 END) AS paid,
SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending,
SUM(CASE WHEN status = 'cancelled' THEN 1 ELSE 0 END) AS cancelled
FROM orders
GROUP BY user_id;FILTER: ทางเลือกที่อ่านง่ายกว่า
ส่วนคำสั่ง FILTER ของ PostgreSQL อ่านได้ง่ายกว่า:
SELECT user_id,
COUNT(*) AS total,
COUNT(*) FILTER (WHERE status = 'paid') AS paid,
COUNT(*) FILTER (WHERE status = 'pending') AS pending,
COUNT(*) FILTER (WHERE status = 'cancelled') AS cancelled
FROM orders
GROUP BY user_id;ทำ pivot เดือนเป็นคอลัมน์
แปลงรูปแบบยาวเป็นรูปแบบกว้างด้วย CASE + ฟังก์ชันรวม:
SELECT year,
SUM(CASE WHEN month = 1 THEN revenue END) AS jan,
SUM(CASE WHEN month = 2 THEN revenue END) AS feb,
-- ...
SUM(CASE WHEN month = 12 THEN revenue END) AS dec
FROM monthly_revenue
GROUP BY year
ORDER BY year;ทำ pivot ตามหมวดหมู่
หนึ่งแถวต่อผู้ใช้ หนึ่งคอลัมน์ต่อสถานะ:
SELECT user_id,
SUM(total) FILTER (WHERE status = 'paid') AS paid_total,
SUM(total) FILTER (WHERE status = 'pending') AS pending_total
FROM orders GROUP BY user_id;ข้อจำกัดของ pivot ด้วย CASE
คุณต้องทราบคอลัมน์เป้าหมายตั้งแต่ตอนเขียนคำสั่ง สำหรับ pivot แบบไดนามิก ให้สร้าง SQL ในแอปพลิเคชันหรือใช้ PL/pgSQL เชิงกระบวนงาน
CASE เทียบกับ COALESCE / NULLIF
COALESCE = "ค่าแรกที่ไม่ใช่ NULL" NULLIF = "เป็น NULL หากค่าเท่ากัน" CASE มีความยืดหยุ่นมากกว่า จึงควรใช้เมื่อ COALESCE/NULLIF ไม่เหมาะกับกรณีนั้น
ความเข้ากันได้ของชนิดข้อมูล
ทุกแขนงของ CASE ต้องคืนค่าที่มีชนิดข้อมูลเข้ากันได้ หากผสมชนิดข้อมูล ให้แปลงชนิดอย่างชัดเจน:
SELECT CASE WHEN x THEN 1::TEXT ELSE 'no' END;CASE ซ้อนกัน
การแบ่งเงื่อนไขหลายระดับ:
SELECT CASE
WHEN amount IS NULL THEN 'no payment'
WHEN amount = 0 THEN 'free'
WHEN amount < 10 THEN 'cheap'
ELSE
CASE WHEN paid_at IS NULL THEN 'overdue' ELSE 'paid' END
END AS status FROM invoices;สรุป
CASE คือการเขียน "if/else" แบบครอบจักรวาลใน SQL
- คอลัมน์ที่คำนวณใน SELECT
- การทำ pivot ผ่าน CASE ในฟังก์ชันรวมหรือ FILTER
- ตรรกะ WHERE / ORDER BY แบบกำหนดเอง
ตรวจสอบความเข้าใจ
ส่วนคำสั่งใดอ่านได้ง่ายที่สุดสำหรับการรวมข้อมูลตามเงื่อนไขใน PostgreSQL
คำถามที่พบบ่อย
บทเรียน “นิพจน์ CASE และคำค้นแบบ Pivot” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “นิพจน์ CASE และคำค้นแบบ Pivot” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “นิพจน์ CASE และคำค้นแบบ Pivot”
ใช้ CASE WHEN ภายในฟังก์ชันรวม เพื่อแปลงตารางแนวตั้งเป็นรายงานตารางไขว้แนวนอน คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “นิพจน์ CASE และคำค้นแบบ Pivot” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- UNION, INTERSECT, EXCEPT
- UNION ALL เทียบกับ UNION (ต้นทุนการลบข้อมูลซ้ำ)
- นิพจน์ CASE และคำค้นแบบ Pivot
- รูปแบบตารางไขว้ (PostgreSQL crosstab())