如何按JOB_NUMBER统计不同RANK人数并在单列展示结果?
解决方案:给每条员工记录添加同职位组内对应职级的总人数
你的需求是按JOB_NUMBER分组,统计该组里每个RANK的总人数,然后把这个统计值单列成RANK_COUNT放在每条员工记录旁边——当前的写法是把不同职级的统计拆成了单独列,还没法对应到每条记录,用窗口函数就能解决这个问题。
修改后的SQL代码
SELECT JOB_NUMBER, RANK, EMPLOYEE, COUNT(*) OVER (PARTITION BY JOB_NUMBER, RANK) AS RANK_COUNT FROM 你的表名; -- 记得替换成实际表名
简单解释
PARTITION BY JOB_NUMBER, RANK:把**同一个职位编号(JOB_NUMBER)且同一个职级(RANK)**的员工归为一组COUNT(*) OVER (...):计算每组的员工总数,这个总数会自动附加到该组的每一条员工记录上,正好符合你要在每条记录旁显示对应职级总人数的需求
实际效果示例
假设原始数据是这样:
| JOB_NUMBER | RANK | EMPLOYEE |
|---|---|---|
| J001 | MGR | 张三 |
| J001 | MGR | 李四 |
| J001 | JR | 王五 |
| J002 | JR | 赵六 |
执行修改后的SQL会得到:
| JOB_NUMBER | RANK | EMPLOYEE | RANK_COUNT |
|---|---|---|---|
| J001 | MGR | 张三 | 2 |
| J001 | MGR | 李四 | 2 |
| J001 | JR | 王五 | 1 |
| J002 | JR | 赵六 | 1 |
这样就实现了每条记录旁都显示同职位组内对应职级的总人数,结果也以单列RANK_COUNT展示,完全符合需求。
内容的提问来源于stack exchange,提问作者niallygee
相关产品推荐
相关产品推荐

