语法格式:row_number() over(partition by 分组列 order by 排序列 desc)java
row_number() over 具备分组排序的功能函数
根据薪水进行排序:spa
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
假设咱们统计一个客户的订单里金额最大的订单?这么去处理?blog
思路是:排序
第一步:先按照客户id进行分组,而后按照薪水进行排序。it
第二步:而后把查到的数据放到临时表中,而后再进行分组处理便可》io
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()平均值()等。class
例如咱们想知道每一个部门有多少人?select
SELECT dept_no as dept, count( emp_no) as counts FROM dept_emp GROUP BY dept_no
HAVING
例如每一个部门人数都有了,那若是咱们想要进一步知道员工人数大于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