淺談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 

 

 

 

 


    
  

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM