注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

PostgreSQL9.4: 聚合函数新增 FILTER 属性  

2014-06-05 11:31:33|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

release note

Add control over which values are passed into aggregate functions using the FILTER clause (David Fetter)

      手册中提到聚合函数增加 FILTER 属性, 也就是说在聚合函数 avg(), min(), max(), sum() 等可以使用 FILTER 属性过滤数据, 之前可能用到到以下方式实现:     

select sum( case when ... then 1 else 0 end ) from ..


--举例    

francs=> select     
          count(*)  as unfiltered,
          sum(case when a >6 then 1 else 0 end) as filtered
FROM generate_series(1,10) as a;
 unfiltered | filtered 
------------+----------
         10 |        4
(1 row)


--9.4 版:使用  FILTER 属性    

francs=> SELECT
    count(*) AS unfiltered,
    count(*) FILTER (WHERE a > 6) AS filtered
FROM generate_series(1,10) AS a;
 unfiltered | filtered 
------------+----------
         10 |        4
(1 row)

备注:这样方便很多,方便平常 SQL 写得多的同学们。

--sum 函数

francs=> SELECT
   sum (a)AS unfiltered,
   sum (a)FILTER (WHERE a > 6) AS filtered 
FROM generate_series(1,10) AS a;
 unfiltered | filtered 
------------+----------
         55 |       34
(1 row)


--1 到 20 按条件分组

francs=> SELECT array_agg(i) FILTER (WHERE i % 2 = 0) AS twos,
       array_agg(i) FILTER (WHERE i % 3 = 0) AS threes,
       array_agg(i) FILTER (WHERE i % 5 = 0) AS fives,
       array_agg(i) FILTER (WHERE i % 7 = 0) AS sevens
  FROM generate_series(1, 20) AS g(i);
            twos             |      threes      |    fives     | sevens 
-----------------------------+------------------+--------------+--------
 {2,4,6,8,10,12,14,16,18,20} | {3,6,9,12,15,18} | {5,10,15,20} | {7,14}
(1 row)


--参考

  评论这张
 
阅读(884)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016