ถ้าต้องการสร้าง 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 เปรียบเทียบยอดต่อรายการ ไม่ใช่ยอดรวมต่อลูกค้า