爱喝葡萄芋圆 2023-08-24 16:09 采纳率: 0%
浏览 4
已结题

dense_rank()函数里b.salary_rank = 1什么意思


select b.*
from(
select a.dept_no, a.emp_no,a.from_date, a.to_date, s.salary,
dense_rank() over(partition by a.dept_no order by s.salary desc ) salary_rank
from dept_emp a join salaries s
on a.emp_no = s.emp_no) b
where b.salary_rank = 1;

能不能告诉我 b.salary_rank = 1 这句话在做什么
dense_rank()排序不应该是1 1 2 3这样子吗?
为什么这样写是正确的
(是我把dense_rank()排序搞混了)我已经想通了

  • 写回答

2条回答 默认 最新

  • 大师兄6668 Python领域新星创作者 2023-08-24 16:26
    关注

    看GPT给出的讲解,已经非常详细了,你参考一下:
    当执行这个查询语句时,会按照以下步骤进行操作:

    1. 首先执行内部子查询:

      select a.dept_no, a.emp_no, a.from_date, a.to_date, s.salary,
      dense_rank() over (partition by a.dept_no order by s.salary desc) salary_rank
      from dept_emp a join salaries s on a.emp_no = s.emp_no
      

      这个子查询将dept_emp表和salaries表进行连接,并使用dense_rank()函数为每个部门按照工资(salary)进行降序排序。partition by a.dept_no表示按照dept_no字段进行分组,然后order by s.salary desc表示按照工资降序排序。结果集包括了a.dept_noa.emp_noa.from_datea.to_dates.salarys.salary_rank

    2. 接下来,将子查询的结果命名为b,并进行外部查询:

      select b.*
      from b
      where b.salary_rank = 1
      

      外部查询从子查询的结果集b中选择所有列(b.*)。然后通过添加where子句来筛选结果,只选择满足b.salary_rank = 1条件的记录,即每个部门中工资排名第一的记录。

    最终,返回满足条件的记录作为结果集。这个查询的目的是获得每个部门中工资排名第一的员工的详细信息。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月25日
  • 修改了问题 8月24日
  • 创建了问题 8月24日

悬赏问题

  • ¥66 定制开发肯德基自动化网站下单软件
  • ¥20 vscode虚拟环境依赖包未安装
  • ¥15 odoo17关于owl开发js代码问题
  • ¥15 光纤中多普勒频移公式的推导
  • ¥15 怎么制作一个人脸识别门禁系统
  • ¥20 大华dss监控平台网络关闭登不进去
  • ¥15 请使用蚁群算法解决下列问题,并给出我完整的代码
  • ¥20 关于php录入完成后,批量更新数据库
  • ¥15 请教往复密封润滑问题
  • ¥15 cocos creator发布ios包