รายงานต้องแสดงพนักงานทุกคนพร้อมค่าเฉลี่ยเงินเดือนของแผนกในแต่ละแถว ควรใช้วิธีใด?

ใช้ GROUP BY เฉพาะแผนกและไม่รวมข้อมูลพนักงาน เพื่อให้ผลลัพธ์ยังมีหนึ่งแถวต่อพนักงาน
ใช้ window function แบ่งกลุ่มตามแผนกเพื่อคำนวณค่าเฉลี่ยโดยยังคงทุกแถวพนักงาน
ใช้ DISTINCT กับเงินเดือนและแผนกเพื่อแทนค่าเฉลี่ยของพนักงานทุกคนในกลุ่ม
ใช้ ORDER BY เงินเดือนในแต่ละแผนกแล้วเลือกค่ากึ่งกลางมาแสดงเป็นค่าเฉลี่ย

เฉลยอธิบาย

Window function คำนวณข้ามแถวที่เกี่ยวข้องโดยไม่ยุบแถวรายละเอียดเป็นแถวเดียว ดังนั้นคำตอบที่เหมาะที่สุดคือ “ใช้ window function แบ่งกลุ่มตามแผนกเพื่อคำนวณค่าเฉลี่ยโดยยังคงทุกแถวพนักงาน” ส่วนตัวลวงที่ใกล้เคียงที่สุดไม่ผ่านเพราะ GROUP BY แบบนี้ยุบรายละเอียดเหลือหนึ่งแถวต่อแผนก

ข้อสอบอื่นในวิชาความรู้เกี่ยวกับระบบฐานข้อมูล (Database System) และ ระบบการบริหารจัดการข้อมูล (Database Management System)

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