浅谈ROW_NUMBER() OVER()函数的使用

Posted xiaofuzi123456

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈ROW_NUMBER() OVER()函数的使用相关的知识,希望对你有一定的参考价值。

 

语法格式:row_number() over(partition by 分组列 order by 排序列 desc)

                  row_number() over 具有分组排序的功能

根据薪水进行排序:

select id,name,age,salary,row_number()over(order by salary desc) rnfrom clm_salary_bak t

 根据id 进行分组,根据薪水进行排序:

 select id,name,age,salary,row_number()over(partition by id order by salary desc) rownum from clm_salary_bak t

 假设我们统计一个客户的订单里金额最大的订单?这么去处理?

思路是:

    第一步:先按照客户id进行分组,然后按照薪水进行排序。

    第二步:然后把查到的数据放到临时表中,然后再进行分组处理即可》

with clm_order_bak as (select orders.salary salary ,orders.custmID id row_number() over (partition by orders.custmID order by orrders.salary) rownum from  clm_order orders)
select max(salary) from clm_order_bak  group by  id   
 

 group by 一般与聚合函数一起使用,主要包括 count()计数,sum() 求和,min()最小值,max()最大值,avg()平均值()等。

例如我们想知道每个部门有多少人?

SELECT
  dept_no as dept,
  count( emp_no) as counts
FROM
  dept_emp 
GROUP BY
  dept_no

 HAVING

说到GROUP BY 我们就不得不提到HAVING,HAVING相当于条件筛选,但它与WHERE筛选不同,HAVING是对于GROUP BY对象进行筛选。

例如每个部门人数都有了,那如果我们想要进一步知道员工人数大于10000的部门是哪些?

SELECT
    de.dept_no  dept,
    count( de.emp_no ) AS coun
FROM
    dept_emp de 
GROUP BY
    de.dept_no 
HAVING
    count( de.emp_no ) > 10000 

 

 

 

 


    
  

 

 

以上是关于浅谈ROW_NUMBER() OVER()函数的使用的主要内容,如果未能解决你的问题,请参考以下文章

ROW_NUMBER() OVER()函数用法详解

ROW_NUMBER() OVER函数的基本用法

ROW_NUMBER() OVER()函数用法;(分组,排序),partition by

ROW_NUMBER() OVER()函数用法;(分组,排序),partition by

ROW_NUMBER() OVER()函数用法;(分组,排序),partition by

MySQL - ROW_NUMBER() OVER()函数用法详解(分组排序)