SQL211

题目链接:SQL211题目链接

题目总结:

窗口函数的进一步认识:

使用这道题目里面的窗口函数的例子来说明:

dense_rank() OVER (
  PARTITION BY dept_no    -- 按部门分组
  ORDER BY salary DESC    -- 按薪资降序排序
) AS rk                  -- 为排名结果命名为 rk

这里面的dense_rank()就是并列排名

OVER 子句:定义窗口范围。

  • PARTITION BY :这个子句就是按什么字段进行分组排名
  • ORDER BY salary DESC:在每个分组内,按薪资从高到低排序。

与此相关的排名函数的对比:

函数名 相同值处理方式 排名是否跳跃? 示例(薪资:100, 100, 80, 70)
ROW_NUMBER() 分配唯一连续排名 是(1, 2, 3, 4) 1, 2, 3, 4
RANK() 相同值相同排名 是(1, 1, 3, 4) 1, 1, 3, 4
DENSE_RANK() 相同值相同排名 否(1, 1, 2, 3) 1, 1, 2, 3

解题SQl代码:

select dept_no,
emp_no,
salary
from 
(
select 
de.dept_no,
de.emp_no,
s.salary,
dense_rank() over(partition by dept_no order by salary desc ) as rk
from dept_emp de 
join salaries s on de.emp_no=s.emp_no
)A
where rk=1
order by dept_no

SQL215

题目链接:SQL215题目链接

题目总结:

认识了窗口函数里面的AVG函数

窗口函数的五种类型:

  •  排名函数

  •  分布函数(即计算当前行占总比例的多少)

  • 聚合函数(作为窗口函数使用):常见的聚合函数(如 SUMAVGMINMAXCOUNT)可以在窗口函数中使用,用于计算分组内的聚合值

  • 偏移函数(用于访问当前行偏移offset后的数据)

  • 其他窗口函数

SQL代码

select distinct t.title,
AVG(s.salary) over(partition by title) as sk
from titles t
join salaries s on t.emp_no=s.emp_no
order by sk

官方题解代码

select t.title,
AVG(s.salary) as salary
from titles t
join salaries s on t.emp_no=s.emp_no
group by t.title
order by salary

重新复习了一下group子句:

Tips:group by子句是搭配聚合函数使用的,但是在select字段里面的没有参与聚合函数的必须写到group by子句里面,不然sql语句会报错。

 posted on 2025-06-30 23:05  熙玺  阅读(16)  评论(0)    收藏  举报

Shu-How Zの小窝

Loading...