ตาราง salary_history บันทึกการเปลี่ยนแปลงเงินเดือน มีคอลัมน์ emp_id, salary, change_date ต้องการหาเงินเดือนล่าสุดของแต่ละพนักงาน ข้อใดใช้ได้ถูกต้อง

SELECT emp_id, salary FROM salary_history WHERE change_date = MAX(change_date);
SELECT sh1.emp_id, sh1.salary FROM salary_history sh1 WHERE sh1.change_date = (SELECT MAX(sh2.change_date) FROM salary_history sh2 WHERE sh2.emp_id = sh1.emp_id);
SELECT emp_id, salary FROM salary_history ORDER BY change_date DESC LIMIT 1;
SELECT emp_id, MAX(salary) FROM salary_history GROUP BY emp_id;

เฉลยอธิบาย

ตัวเลือก B เป็น correlated subquery ที่หา MAX(change_date) แยกตาม emp_id ตัวเลือก A ใช้ aggregate ใน WHERE ไม่ได้ตามรูปนี้ ตัวเลือก C คืนล่าสุดเพียงแถวเดียวของทั้งตาราง และ D หาเงินเดือนสูงสุดไม่ใช่รายการล่าสุด หากวันซ้ำควรกำหนดตัวตัดสินเพิ่ม

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

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