zoukankan      html  css  js  c++  java
  • 浅谈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 
    

     


        
      

     

  • 相关阅读:
    下载安装Git,学习笔记
    php面试相关整理
    2.5 DQL 分组查询
    2.4 DQL 常见函数
    2.3 DQL 排序查询
    2.2 DQL 条件查询
    2.1 DQL 基础查询
    1.2 MySQL的介绍
    1.1 数据库的相关概念
    2019年JavaEE学习线路
  • 原文地址:https://www.cnblogs.com/xiaofuzi123456/p/11637784.html
Copyright © 2011-2022 走看看