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

ข้อผิดพลาดที่พบบ่อย: 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 orders

SUM ของคอลัมน์ที่เป็น 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. COUNT, SUM, AVG, MIN, MAX
  2. GROUP BY สำหรับคอลัมน์เดียวและหลายคอลัมน์
  3. HAVING เทียบกับ WHERE
  4. ข้อผิดพลาดที่พบบ่อย: NULL ในการรวมข้อมูล
← กลับไปที่ SQL Academy