首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Oracle SQL 篩選擁有 ≥2 顧客的員工:GROUP BY + HAVING

     編輯:程式設計綜合問答

標準寫法


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
);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved