HQL 统计每个部门薪水最高的前两名员工 优解
时间: 2023-11-11 15:22:06 浏览: 51
可以使用窗口函数来完成该查询,具体的 SQL 语句如下所示:
```
SELECT dept_id, emp_id, salary
FROM (
SELECT dept_id, emp_id, salary,
ROW_NUMBER() OVER (PARTITION BY dept_id ORDER BY salary DESC) as rank
FROM employee
) tmp
WHERE rank <= 2;
```
解释一下这个 SQL 语句的具体步骤:
1. 内层查询先根据部门分组,然后按照薪水降序排序,然后使用 ROW_NUMBER() 窗口函数为每个员工计算排名。
2. 外层查询从内层查询结果中筛选出排名在前两名的员工,输出他们的部门 ID、员工 ID 和薪水。
这样就可以得到每个部门薪水最高的前两名员工了。
相关问题
HQL 统计每个部门薪水最高的前两名员工
您好,针对您的问题,可以使用以下 HQL 语句来实现:
```
SELECT e1.department, e1.name, e1.salary
FROM Employee e1
WHERE (
SELECT COUNT(DISTINCT e2.salary)
FROM Employee e2
WHERE e2.department = e1.department AND e2.salary >= e1.salary
) <= 2
```
以上语句会查询每个部门中薪水排名前两名的员工信息,其中包括所属部门、员工姓名和薪水等信息。请注意,这里假设数据表名称为 Employee,其中包含 department (部门)、name (姓名) 和 salary (薪水) 等字段。
编写HQL代码统计每个手机品牌被推荐的次数(display_type为recommend),并按照展示的次数从大到小排序;
可以使用以下HQL代码实现:
```
SELECT device.brand, COUNT(device.brand) AS recommend_count
FROM Device device
WHERE device.display_type = 'recommend'
GROUP BY device.brand
ORDER BY recommend_count DESC
```
这段HQL代码会从Device表中选择出display_type为'recommend'的记录,然后按照品牌分组,并统计每个品牌被推荐的次数。最后,按照推荐次数从大到小排序,返回一个品牌和对应推荐次数的列表。