สมมติว่ามีตาราง ยอดขาย ที่มีข้อมูลหลายล้านแถว และต้องการหายอดขายสะสมต่อเดือน (Running Total) เรียงตามวันที่ ควรใช้เทคนิคใดที่เหมาะสมที่สุด

ใช้ SUM() OVER (ORDER BY วันที่ ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
ใช้ Subquery ในการ SELECT โดยนับยอดขายทุกแถวที่มีวันที่น้อยกว่าหรือเท่ากับแถวปัจจุบัน
ใช้ UNION ALL เพื่อรวมข้อมูลทีละเดือนแล้วคำนวณรวม
ใช้ GROUP BY เดือน แล้วนำผลลัพธ์มาบวกสะสมด้วยโปรแกรม

เฉลยอธิบาย

Window Function SUM() OVER() พร้อม ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW คือวิธีที่เหมาะสมที่สุดสำหรับ Running Total เพราะประมวลผลในครั้งเดียวโดยไม่ต้อง Self-Join หรือ Correlated Subquery ซึ่งมีประสิทธิภาพสูงมากสำหรับข้อมูลขนาดใหญ่ ตัวเลือก B เป็น correlated subquery ที่อาจคำนวณซ้ำ ส่วน A ใช้ UNION ALL และ D ต้องประมวลผลนอกฐานข้อมูล ทั้งนี้ควรระบุคอลัมน์ผูกลำดับเพิ่มเมื่อวันที่ซ้ำเพื่อให้ running total แน่นอน

ข้อสอบอื่นในวิชาการใช้ภาษา SQL

ดูข้อสอบวิชานี้ทั้งหมด →