หลายครั้งที่ต้องเจองานในการเขียน SQL ประเภทการหาผลรวม (SUM) ของรายการ ตามเงื่อนไข A, B, C, D และอื่นๆจิปาถะ ลองมาดูตัวอย่างกัน
เตรียมข้อมูล
- กำหนดโครงสร้างตาราง OrderTx ดังรูป

- กำหนดข้อมูลให้ตาราง ดังนี้

ความต้องการ(โจทย์)
มาดูโจทย์ เราต้องการหาผลรวมของ Unit เฉพาะรายการขาย(BUY) ที่ยืนยันแล้ว(ISCONFIRM) และมีวันขายสินค้าระหว่างวันที่ 1-Oct-2013 ถึง วันที่ 10-Oct-2013 โดยสามารถเขียน Query ได้ ดังนี้

ปัญหา
หากเรามีรายการใหม่ขึ้นมา ได้แก่การ รายการประเภทซื้อเชื่อ(BUY_CREDIT) พอทดสอบ Query พบว่าได้ค่า NULL เพราะ ไม่มีข้อมูลที่ตรงตามเงื่อนไข แต่ถ้าระบบส่งข้อมูลยังโปรแกรมที่เราพัฒนาขึ้น USER คงไม่เข้าใจ และอาจจะเกิด ERROR ขึ้นมาได้

วิธีการแก้ไข
ใช้ฟังก์ชัน (function) coalesce(<column>, 0) เพื่อแปลงค่า NULL เป็นค่าที่่ต้องการ เช่น 0 ดัง QUERY ดังนี้

สรุป
การเขียนโปรแกรม แต่ละแบบเราควรดักความผิดพลาด หรือจัดการกับมันตั้งแต่เนิ่นๆ เพื่อให้โปรแกรมที่เราพัฒนานั้นมีความเชื่อถือ และมีผลลัพธ์ที่ถูกต้อง
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.