zoukankan      html  css  js  c++  java
  • postgresql 窗口函数排序实例

    经常遇到一种应用场景,将部分行的内容进行汇总、比较、排序。

    比如数据表名称test.test2

    select num,province from test.test2

    得到结果:

    1828;"黑龙江"
    137;"黑龙江"
    184;"黑龙江"
    183;"福建"
    125;"福建"
    143;"福建"
    119;"海南"
    109;"海南"
    132;"海南"

    那么我希望将内容按照省份来排序,那么需要:

    select 
      province, 
      num,
      sum(num) over (partition by province order by num desc ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as all_num
    from test.test2

    得到结果:

    "海南";132;132
    "海南";119;251
    "海南";109;360
    "福建";183;183
    "福建";143;326
    "福建";125;451
    "黑龙江";1828;1828
    "黑龙江";184;2012
    "黑龙江";137;2149

    如果还要看每行占整个省份的百分比,那么需要

    with tmp as(
    select 
      province, 
      num,
      sum(num) over (partition by province order by num desc ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as curr_num,
      sum(num) over (partition by province ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) as all_num
    from test.test2
    )
    select 
       province, 
      num,
      all_num,
      curr_num/all_num
    from tmp

    结果如下

    "海南";132;360;0.36666666666666666667
    "海南";119;360;0.69722222222222222222
    "海南";109;360;1.00000000000000000000
    "福建";183;451;0.40576496674057649667
    "福建";143;451;0.72283813747228381375
    "福建";125;451;1.00000000000000000000
    "黑龙江";1828;2149;0.85062819916240111680
    "黑龙江";184;2149;0.93624941833410888785
    "黑龙江";137;2149;1.00000000000000000000
  • 相关阅读:
    Orchard1.4发布
    13个MVC的扩展
    不完全接触Node.js
    mac软件
    在Apworks框架中解除NHibernateContext与NHibernateRepository的依赖关系
    mac下我常用的一些软件
    在.NET应用程序中访问Excel的几种方式
    Visual Studio 11 Beta 官方下载地址
    欢迎使用 Windows 8 – Consumer Preview
    PHP学习系列之 环境配置
  • 原文地址:https://www.cnblogs.com/liqiu/p/4273513.html
Copyright © 2011-2022 走看看