ถ้าต้องการสร้าง subquery ที่หาลูกค้าที่มียอดขายรวมมากกว่าค่าเฉลี่ยยอดขายทั้งหมด คำสั่งใดแสดงความเข้าใจเรื่อง Correlated Subquery ได้ดีที่สุด

SELECT c.* FROM customers c WHERE (SELECT SUM(o.total) FROM orders o WHERE o.customer_id = c.id) > (SELECT AVG(total) FROM orders)
SELECT * FROM customers WHERE total > (SELECT AVG(total) FROM orders GROUP BY customer_id)
SELECT DISTINCT c.* FROM customers c, orders o WHERE c.id = o.customer_id AND o.total > (SELECT AVG(total) FROM orders)
SELECT * FROM customers WHERE id IN (SELECT customer_id FROM orders WHERE total > (SELECT AVG(total) FROM orders))

เฉลยอธิบาย

Correlated Subquery คือ subquery ที่อ้างอิงถึงคอลัมน์จากคำสั่ง SELECT ด้านนอก ตัวเลือก B แสดง WHERE o.customer_id = c.id ซึ่งสัมพันธ์กับแถว c จากคำสั่งด้านนอก ตัวเลือก A ไม่ใช่ Correlated Subquery, ตัวเลือก A อาจคืนหลายแถวจาก subquery จนเปรียบเทียบด้วย > ไม่ได้ ตัวเลือก C และ D เปรียบเทียบยอดต่อรายการ ไม่ใช่ยอดรวมต่อลูกค้า

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

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