zoukankan      html  css  js  c++  java
  • 一个简单sql,记住高级的,可惜忘记了初级的

    需求是找出每个部门薪水最高的三个职员。

    dep 部门
    emp 人员
    sal 薪水

    基本处理方式

    with tmp_t0 as (
      select '开发部' as dep,'张一' as emp, 1000::int8 as sal union all
      select '开发部' as dep,'张二' as emp, 2000::int8 as sal union all
      select '开发部' as dep,'张三' as emp, 3000::int8 as sal union all
      select '开发部' as dep,'张四' as emp, 4000::int8 as sal union all
      select '测试部' as dep,'李一' as emp, 2000::int8 as sal union all
      select '测试部' as dep,'李二' as emp, 8000::int8 as sal union all
      select '测试部' as dep,'李三' as emp, 4000::int8 as sal union all
      select '运维部' as dep,'王一' as emp, 500::int8 as sal 
    )
    select t0.dep,
           t0.emp,
           t0.sal
      from tmp_t0 t0
     where 1=1
       and ( select count(1)
               from tmp_t0 t1
              where 1=1
                and t0.dep=t1.dep
                and t1.sal >= t0.sal
            ) <=3
     order by t0.dep,
              t0.sal desc
    

    分析函数处理

    with tmp_t0 as (
      select '开发部' as dep,'张一' as emp, 1000::int8 as sal union all
      select '开发部' as dep,'张二' as emp, 2000::int8 as sal union all
      select '开发部' as dep,'张三' as emp, 3000::int8 as sal union all
      select '开发部' as dep,'张四' as emp, 4000::int8 as sal union all
      select '测试部' as dep,'李一' as emp, 2000::int8 as sal union all
      select '测试部' as dep,'李二' as emp, 8000::int8 as sal union all
      select '测试部' as dep,'李三' as emp, 4000::int8 as sal union all
      select '运维部' as dep,'王一' as emp, 500::int8 as sal 
    )
    select t00.dep,
           t00.emp,
           t00.sal
    from (
        select t0.dep,
               t0.emp,
               t0.sal,
               rank() over (partition by t0.dep order by t0.sal desc) as rk
          from tmp_t0 t0
         where 1=1
         ) t00
    where 1=1
      and t00.rk <=3
     order by t00.dep,
    

    第一个基本处理方式居然没有想到,一看到需求就想到用分析函数。
    懂得高级的,也不能忘记初级的。

  • 相关阅读:
    PyCharm设置中文字体
    pycharm中设置鼠标滚动放大和缩小页面
    cas5.3.2单点登录-自定义登录页面(十四)
    P1616疯狂的采药
    P2430严酷的训练
    P1164小A点菜
    P1015回文数
    P2871 手链
    《学习OpenCV》课后习题解答6
    《学习OpenCV》课后习题解答5
  • 原文地址:https://www.cnblogs.com/ctypyb2002/p/9792923.html
Copyright © 2011-2022 走看看