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