標準寫法
SELECT e.emp_id, e.emp_name
FROM employees e
JOIN customers c ON c.emp_id = e.emp_id
GROUP BY e.emp_id, e.emp_name
HAVING COUNT(DISTINCT c.cust_id) >= 2;
解析
- `JOIN` 關聯員工與顧客。
- `GROUP BY` 按員工分組。
- `COUNT(DISTINCT c.cust_id)` 計算**不同顧客數** (避免重複訂單導致重複計數)。
- `HAVING` 過濾分組結果。
若只需員工 ID
SELECT emp_id
FROM customers
GROUP BY emp_id
HAVING COUNT(DISTINCT cust_id) >= 2;
效能優化
- 在 `customers.emp_id`、`customers.cust_id` 建立索引。
- 若員工表極大,考慮 `EXISTS` 子查詢:
SELECT emp_id FROM employees e
WHERE EXISTS (
SELECT 1 FROM customers c
WHERE c.emp_id = e.emp_id
GROUP BY c.emp_id
HAVING COUNT(DISTINCT c.cust_id) >= 2
);