You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用HAVING子句统计员工开户数并找出开户最多的员工

需求1:统计每位员工开立的账户数量

通过关联accounts与employee表,按员工维度分组统计账户数量:

SELECT 
    e.emp_id,
    e.first_name,
    e.last_name,
    COUNT(a.account_id) AS account_count
FROM 
    employee e
LEFT JOIN 
    accounts a ON e.emp_id = a.open_emp_id
GROUP BY 
    e.emp_id, e.first_name, e.last_name
ORDER BY 
    account_count DESC;
  • 用LEFT JOIN可包含未开立任何账户的员工(其账户数显示为0);若仅需统计有开户记录的员工,替换为INNER JOIN即可。
需求2:找出开立账户数量最多的员工

以下两种方法均可处理并列最多的场景:

方法1:先统计最大账户数再匹配员工

WITH emp_account_counts AS (
    SELECT 
        e.emp_id,
        e.first_name,
        e.last_name,
        COUNT(a.account_id) AS account_count
    FROM 
        employee e
    LEFT JOIN 
        accounts a ON e.emp_id = a.open_emp_id
    GROUP BY 
        e.emp_id, e.first_name, e.last_name
)
SELECT 
    emp_id,
    first_name,
    last_name,
    account_count
FROM 
    emp_account_counts
WHERE 
    account_count = (SELECT MAX(account_count) FROM emp_account_counts);

方法2:使用窗口函数(推荐,并列场景更直观)

WITH emp_account_counts AS (
    SELECT 
        e.emp_id,
        e.first_name,
        e.last_name,
        COUNT(a.account_id) AS account_count,
        RANK() OVER(ORDER BY COUNT(a.account_id) DESC) AS rank_num
    FROM 
        employee e
    LEFT JOIN 
        accounts a ON e.emp_id = a.open_emp_id
    GROUP BY 
        e.emp_id, e.first_name, e.last_name
)
SELECT 
    emp_id,
    first_name,
    last_name,
    account_count
FROM 
    emp_account_counts
WHERE 
    rank_num = 1;
  • RANK()会给所有账户数并列第一的员工标记为1,确保全部查询出来;若用ROW_NUMBER()仅返回其中一位,不符合需求。

内容的提问来源于stack exchange,提问作者Soyoon Moon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 14:27:13