ข้อผิดพลาดที่พบบ่อย: NULL ในการรวมข้อมูล
หลีกเลี่ยงกับดัก NULL แบบคลาสสิก: AVG ไม่รวม NULL, COUNT(column) ข้าม NULL และผลลัพธ์ที่คาดไม่ถึงเมื่อจัดกลุ่มตามคอลัมน์ที่รับค่า NULL ได้
ข้อผิดพลาดที่พบบ่อย: NULL ในการรวมข้อมูล เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
ค่ารวมไม่รวม NULL
ค่ารวมทุกชนิดยกเว้น COUNT(*) จะไม่สนใจค่า NULL ที่ป้อนเข้า บางครั้งนี่คือสิ่งที่คุณต้องการ และบางครั้งก็เป็นข้อผิดพลาด
ข้อผิดพลาดที่พบบ่อย: COUNT(*) เทียบกับ COUNT(col)
ผลลัพธ์จะแตกต่างกันเมื่อคอลัมน์มีค่า NULL:
SELECT COUNT(*) FROM users; -- 1000
SELECT COUNT(email) FROM users; -- 950 (50 users have NULL email)ข้อผิดพลาด: AVG ไม่นับ NULL เป็นศูนย์
คะแนน [5, 5, NULL] → AVG = 5 ไม่ใช่ (5+5+0)/3 = 3.33 โปรดตัดสินใจว่านี่เป็นผลลัพธ์ที่คุณต้องการหรือไม่
SELECT AVG(rating) FROM reviews; -- 5
SELECT AVG(COALESCE(rating, 0)) FROM reviews; -- 3.33ตารางว่าง = ค่ารวมเป็น NULL
หากไม่มีแถวที่ตรงกัน SUM/AVG/MIN/MAX จะคืนค่า NULL ไม่ใช่ 0 ให้จัดการกรณีนี้ด้วย COALESCE:
SELECT COALESCE(SUM(total), 0) AS revenue
FROM orders
WHERE user_id = 999999; -- safe even when user has no ordersSUM ของคอลัมน์ที่เป็น NULL
หากค่าของทุกแถวเป็น NULL, SUM จะคืนค่า NULL ไม่ใช่ 0 นี่เป็นข้อผิดพลาดในลักษณะเดียวกัน
GROUP BY กับคีย์การจัดกลุ่มที่เป็น NULL
NULL จะสร้างกลุ่มของตัวเอง:
SELECT country, COUNT(*) FROM users
GROUP BY country;
-- → ('US', 100), ('CA', 30), (NULL, 5)การนับค่าที่ไม่ซ้ำโดยมี NULL
COUNT(DISTINCT col) จะไม่รวม NULL:
INSERT INTO t (c) VALUES (1),(2),(NULL),(NULL),(2);
SELECT COUNT(DISTINCT c) FROM t; -- 2 (NULL not counted)DISTINCT หลายคอลัมน์
ชุดค่าที่มี NULL ยังคงแตกต่างจากชุดค่าอื่นที่มีคอลัมน์ซึ่งไม่ใช่ NULL เหมือนกัน:
SELECT COUNT(*) FROM (
SELECT DISTINCT a, b FROM t
) sub;ระวังการเชื่อมตารางทางเลือกโดยไม่รู้ตัว
LEFT JOIN อาจทำให้เกิดค่า NULL ซึ่งเปลี่ยนผลลัพธ์ของค่ารวมได้ โปรดตัดสินใจว่าจะนับแถวเหล่านั้นหรือกรองออก:
SELECT u.id, COUNT(o.id) AS orders
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id; -- COUNT(o.id) gives 0 for users with no ordersใช้ FILTER สำหรับการนับแบบมีเงื่อนไข
FILTER อ่านเข้าใจง่ายกว่าการใช้ CASE ภายใน SUM:
SELECT COUNT(*) FILTER (WHERE status = 'paid') AS paid_count,
COUNT(*) FILTER (WHERE status = 'refunded') AS refund_count
FROM orders;ทดสอบค่ารวมกับ NULL เสมอ
เมื่อเพิ่มคำสั่งสอบถามค่ารวมใหม่ ให้ทดสอบกับข้อมูลตัวอย่างที่มีค่า NULL ด้วย ข้อผิดพลาดนี้แทบไม่เคยปรากฏในข้อมูลทดสอบที่สะอาด
สรุป
NULL ร่วมกับค่ารวมเป็นข้อผิดพลาด SQL ที่พบบ่อยที่สุด
- ค่ารวมจะข้าม NULL ยกเว้น COUNT(*)
- ผลลัพธ์ว่างเปล่า → NULL ไม่ใช่ 0
- ครอบค่าด้วย COALESCE เมื่อต้องการให้เป็น 0
- ตรวจสอบค่ารวมจาก LEFT JOIN อย่างระมัดระวัง
ตรวจสอบความเข้าใจ
Reviews มีคะแนน [5, 5, NULL, 1] ค่า AVG(rating) จะคืนค่าเท่าใด
คำถามที่พบบ่อย
บทเรียน “ข้อผิดพลาดที่พบบ่อย: NULL ในการรวมข้อมูล” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ข้อผิดพลาดที่พบบ่อย: NULL ในการรวมข้อมูล” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ข้อผิดพลาดที่พบบ่อย: NULL ในการรวมข้อมูล”
หลีกเลี่ยงกับดัก NULL แบบคลาสสิก: AVG ไม่รวม NULL, COUNT(column) ข้าม NULL และผลลัพธ์ที่คาดไม่ถึงเมื่อจัดกลุ่มตามคอลัมน์ที่รับค่า NULL ได้ คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “ข้อผิดพลาดที่พบบ่อย: NULL ในการรวมข้อมูล” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- COUNT, SUM, AVG, MIN, MAX
- GROUP BY สำหรับคอลัมน์เดียวและหลายคอลัมน์
- HAVING เทียบกับ WHERE
- ข้อผิดพลาดที่พบบ่อย: NULL ในการรวมข้อมูล