【发布时间】:2021-05-08 16:28:22
【问题描述】:
所以我有一个名为 title 的表,其中存储了每个员工持有的所有头衔,看起来像这样
| emp_no | title | start_date |
|---|---|---|
| 101 | Engineer | 2019-01-01 |
| 101 | Senior Engineer | 2020-02-01 |
| 102 | Engineer | 2019-01-11 |
| 102 | Senior Engineer | 2020-02-11 |
| 103 | Engineer | 2019-01-21 |
| 104 | Engineer | 2019-01-31 |
| 105 | Associate | 2019-01-01 |
| 106 | Associate | 2019-01-11 |
| 106 | Manager | 2020-02-11 |
| 107 | Associate | 2019-01-21 |
| 107 | Manager | 2020-02-21 |
| 108 | Associate | 2019-01-31 |
请注意,每位员工可以拥有多个头衔。例如emp 101的职称是2019年1月1日的工程师,一年后晋升为高级工程师。
现在假设我想计算每个职位有多少员工。我曾尝试将 count 函数与 group by 一起使用(按职位对员工人数进行分组),但问题是,SQL 查询还计算每个员工的过去职位。
确切地说,我只想包含员工当前拥有的最新角色。所以在这种情况下,我期待的结果是 工程师:2名员工(因为另外2名已晋升为高级工程师), 高级工程师:2名, Associate:2 名员工(因为另外 2 名已晋升为经理), 经理:2名员工
有什么方法可以实现吗? 注意:此表格格式来自我正在学习的 SQL 在线课程之一,因此我不是制作表格的人。而且在原始表中也包含了上万条数据。
【问题讨论】:
-
请不要标记冲突的 RDBMS。只标记你真正使用的那个。
-
大多数 RDBMS 支持
ROW_NUMBER() OVER()nowdays modern-sql.com/caniuse/row_number