题目:现在有员工表和部门表,选出每个部门中薪资前三的员工的具体信息。具体表结构如下:
员工表:
部门表:
最终SQL如下:
GROUP BY
dep.id ,emp.id,emp.name ,emp.salary,dep.name
HAVING COUNT(*)<=3
ORDER BY
emp.departmentId , emp.salary ;
查询结果如下:
分析:
SELECT
emp.id , emp.name ,emp.salary, dep.id as depId , dep.name as depName
FROM
tb_employee emp ,tb_employee emp1, tb_department dep
WHERE
emp.salary <=emp1.salary
AND emp.departmentId = emp1.departmentId
AND emp.departmentId = dep.id
的查询结果为:
这个很难看出甚麽来,我们在查询结果中添加两列:
SELECT
emp.id , emp.name ,emp.salary, emp1.name as name1, emp1.salary as salary1, dep.id as depId , dep.name as depName
FROM
tb_employee emp ,tb_employee emp1, tb_department dep
WHERE
emp.salary <=emp1.salary
AND emp.departmentId = emp1.departmentId
AND emp.departmentId = dep.id
查询结果如下:
可以看出,这其实就是一个自连接查询。
由于要找出每个部门中薪资最高的员工的信息,故要进行分组操作。
SELECT
emp.id , emp.name ,emp.salary, dep.id as depId , dep.name as depName
FROM
tb_employee emp ,tb_employee emp1, tb_department dep
WHERE
emp.salary <=emp1.salary
AND emp.departmentId = emp1.departmentId
AND emp.departmentId = dep.id
GROUP BY
dep.id ,emp.id,emp.name ,emp.salary,dep.name
查询结果如下:
这里需要注意一点:group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面。
添加HAVING COUNT(*)<=3,表示,在指定的一个部门中,工资大于或者等于该员工的工资的人数不大于3,即该员工工资处于该部门的前三的最后一名(如果该部门只有两名员工,则为第二名,如果只有一名员工,则为第一名).
查询结果为:
故最后SQL语句为:
SELECT
emp.id , emp.name ,emp.salary, dep.id as depId , dep.name as depName
FROM
tb_employee emp ,tb_employee emp1, tb_department dep
WHERE
emp.salary <=emp1.salary
AND emp.departmentId = emp1.departmentId
AND emp.departmentId = dep.id
GROUP BY
dep.id ,emp.id,emp.name ,emp.salary,dep.name
HAVING COUNT(*)<=3
ORDER BY
emp.departmentId , emp.salary desc;
注:该题目来自于
https://oj.leetcode.com/problems/department-top-three-salaries/
答案参考于
http://www1.huachu.com.cn/read/readbookinfo.asp?sectionid=1000006875
- 大小: 13.4 KB
- 大小: 6.7 KB
- 大小: 10.7 KB
- 大小: 18.1 KB
- 大小: 19.9 KB
- 大小: 11.2 KB
- 大小: 10.3 KB
分享到:
相关推荐
查询每个部门经理的下属员工信息 ```sql SELECT a.empno, a.ename, a.deptno, b.ename FROM emp a, emp b WHERE a.deptno = b.deptno AND b.job = 'MANAGER'; ``` 此查询通过比较两个`emp`表中的部门编号来找到经理...
这是一个分组查询,需要计算每个部门的员工数量、平均工资和服务期限。 14. 列出所有员工的姓名、部门名称和工资: 这需要对员工表和部门表进行连接查询,以获取所有员工的详细信息。 15. 列出所有部门的详细...
这样的方式使得每个员工都有机会展示自己的专业技能,同时也为部门内部的交流和切磋提供了平台。 比赛的时间与地点有明确的规定,定于7月15日下午2点在酒店10楼的宴会厅及外围区域举行。这样的安排既保证了比赛的...
这个查询使用了聚合函数`AVG()`来计算每个部门的平均工资,并通过`GROUP BY`子句按部门编号分组。 ### 14. 查询每个部门的雇员数量 ```sql SELECT deptno, COUNT(*) FROM emp GROUP BY deptno; ``` 这里使用`...
- “年度标兵”:由管理组投票及顾客代表意见选出,作为员工榜样,获奖者将获得荣誉和绩效加分,连续三次获得“金牌员工”称号的员工可晋升一级。 6. 处罚制度: - 违反公司规章制度和纪律的员工将受到口头批评、...
绩效管理的目标是通过建立一个公正、透明的评价体系,让每个员工都明确知晓自己在组织中的角色和责任。这涉及到绩效管理制度的建立,包括但不限于制度的起草、修订、审核和公告。绩效考核指标体系的构建是其中的核心...
2. 考勤造册:强调了每月固定时间提交考勤表,依据人事变动调整员工信息,录入离职人员信息,核实员工出勤、假期及扣款情况,确保薪酬计算的公正性。 二、招聘 1. 招聘流程:部门提出需求,逐级审批,选择招聘渠道...
在这个过程中,每个环节都承担着特定的职责,最终确保每个被录用的员工都经历了全面的评估。 入职规定是新员工融入企业的重要环节。按照规定,新员工必须在指定时间到人力资源部报到,并提交相关的证书原件及复印件...
这意味着管理者需要合理安排人力资源,确保组织内的每个人都能在其最适合的位置上发挥最大效能。 #### 6. 职位评价方法 - **知识点**: 下列哪项属于职位评价方法。 - **解析**: **职位归类法**(选项D)是一种常见...
通过`GROUP BY`将数据按照部门进行分组,再利用`AVG()`计算每个部门的平均工资,并通过`HAVING`子句筛选出平均工资超过8000的部门。 ```sql SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP...
- 每个班组的基础得分为100分,根据当月表现调整。 - 根据班组数量的不同,确定最终的优秀班组数量。 - 通过听取班组长汇报及检查班组记录等方式进行综合评价。 - 优秀班组由部门评选小组决定。 2. **奖励标准*...
- 工作推进中,行政部会跟进每个员工的工作落实情况,并对前日工作进行汇报,若有违规同样会进行绩效扣罚。 4. **工资发放流程**: - 每月24日,行政部负责向每位员工发放工资。 - 员工需核实工资内容,如有疑问...
通过对员工的工作时间进行准确记录,可以有效评估工作效率和生产力水平,同时也为薪资计算、加班费发放等提供依据。在该总结报告的第一部分中,可能会涉及具体的工时统计方法、工具以及统计结果的应用等方面。 ### ...
背景调查是确保员工可靠性和合法性的重要环节,涉及到候选人的个人信息核实,包括但不限于姓名、住址和前雇主信息。这一环节确保了公司录用的人员是符合法律和社会道德标准的。此外,通过体检来确保员工的健康状况,...
错误,因为它试图比较单个员工的薪水与每个部门的平均薪水,这会产生错误,因为一个员工的薪水不可能等于所有部门的平均薪水。 - C. SELECT DISTINCT department_id FROM employees WHERE salary > ANY (SELECT ...
评选对象覆盖全体员工,每个部门每月将选出一名“岗位标兵”。评选周期为每月一次,确保评选的及时性和连续性。评选条件包括:在公司工作满两个月,品行端正,无违规记录,以及获得同事和管理层的认可。这确保了被...
所有公司员工都有资格参与评选,每个月会选出办公室和生产车间各一名“岗位标兵”。 评选周期: 评选活动每月进行一次,确保及时反馈员工的工作表现,鼓励持续改进。 评选基本条件: 1. 员工需在公司连续工作满两...
评选范围覆盖全体员工,每月将选出办公室和生产车间各一名“岗位标兵”。评选周期为一个月,确保评选活动的持续性和时效性。要成为“岗位标兵”的候选人,需满足以下基本条件:在公司工作连续满两个月,品行端正,...
- **解释**:首先创建一个子查询,该子查询返回每个部门的最大工资,然后从这些最大工资中选择最小值。 通过以上知识点的梳理和详细解释,我们不仅深入了解了数据库作业中的核心概念和技术要点,还学习了如何运用...
【招聘工作流程】 招聘工作是企业获取人才的关键环节,它涉及到多个步骤,旨在确保找到最合适的员工加入组织。...每个环节都体现了对人才质量的重视和对流程规范的遵守,以达到优化人力资源配置的目标。