查看: 3819|回复: 4

DB2 SQL 学习笔记一

[复制链接]
论坛徽章:
10
数据库板块每日发贴之星
日期:2009-06-04 01:01:02祖国60周年纪念徽章
日期:2009-10-09 08:28:002009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-06-28 01:01:02数据库板块每日发贴之星
日期:2009-06-15 01:01:02数据库板块每日发贴之星
日期:2009-06-14 01:01:02数据库板块每日发贴之星
日期:2009-06-09 01:01:02数据库板块每日发贴之星
日期:2009-06-07 01:01:02授权会员
日期:2009-06-06 10:43:16数据库板块每日发贴之星
日期:2010-12-01 01:01:01
跳转到指定楼层
1#
发表于 2009-6-19 17:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.  partition
    select c1,c2,c3, rank() over(partition by c2 order by c3 desc)
    as r1, rank() over (order by c3 desc) as r2
    from t1
    where c2 in (15,20)
    order by c2,c1
   
   
2.  Rank ,Over
    select c1,c2,c3 ,rank() over(order by  c3 asc null last) c4
    from t1
    where c1 in(15,20)
   
3.  reporting function
     select c1,c2,c3 ,sum(c3) over (partition by c2) as s1
     from t1
    where c2 in(15,20)
   
--------------------------------------------------------------------------------------------------   

db2 => select * from test
NO          NAME  KM    CJ
----------- ----- ----- -----------
          1 zsan  yuwen          80
          1 zsan  shuxe          86
          1 zsan  eng            78
          2 lisi  yuwen          73
          2 lisi  shuxe          90
          2 lisi  eng            67
  6 条记录已选择。
   
db2 => select name,km,cj,rank() over(order by cj desc) from test
NAME  KM    CJ          4
----- ----- ----------- --------------------
lisi  shuxe          90                    1
zsan  shuxe          86                    2
zsan  yuwen          80                    3
zsan  eng            78                    4
lisi  yuwen          73                    5
lisi  eng            67                    6
  6 条记录已选择。
db2 => select name,km,cj,rank() over(partition by km order by cj desc) from test

NAME  KM    CJ          4
----- ----- ----------- --------------------
zsan  eng            78                    1
lisi  eng            67                    2
lisi  shuxe          90                    1
zsan  shuxe          86                    2
zsan  yuwen          80                    1
lisi  yuwen          73                    2
  6 条记录已选择。
db2 => select name,km,cj,rank() over(partition by name order by cj desc) from te
st
NAME  KM    CJ          4
----- ----- ----------- --------------------
lisi  shuxe          90                    1
lisi  yuwen          73                    2
lisi  eng            67                    3
zsan  shuxe          86                    1
zsan  yuwen          80                    2
zsan  eng            78                    3
  6 条记录已选择。
-------------------------------------------------------------------------------------------------

db2 => select name,km,cj,sum(cj) over(order by cj desc) from test
NAME  KM    CJ          4
----- ----- ----------- -----------
lisi  shuxe          90          90
zsan  shuxe          86         176
zsan  yuwen          80         256
zsan  eng            78         334
lisi  yuwen          73         407
lisi  eng            67         474
  6 条记录已选择。
     
db2 => select name,km,cj,sum(cj) over(partition by name order by cj desc) from t
est
NAME  KM    CJ          4
----- ----- ----------- -----------
lisi  shuxe          90          90
lisi  yuwen          73         163
lisi  eng            67         230
zsan  shuxe          86          86
zsan  yuwen          80         166
zsan  eng            78         244
  6 条记录已选择。
db2 => select name,km,cj,sum(cj) over(partition by name) from test
NAME  KM    CJ          4
----- ----- ----------- -----------
lisi  yuwen          73         230
lisi  shuxe          90         230
lisi  eng            67         230
zsan  yuwen          80         244
zsan  shuxe          86         244
zsan  eng            78         244
  6 条记录已选择。

----------------------------------------------------------------------------------------------

    Percent change
   
    select year(sales_id) as y,quarter(sales_d) as q,
    sum(sales) as tot_s,
    sum(sales)*100/sum(sales) over(order by year(sales_d),quarter(sales_d)
    rows between 1 preceding and 1 preceding)-100 as pct_change
    from t1
    group by year(sales_id) ,quarter(sales_d)
   
    季度销售总额  sum(sales)
   
    本季度的销售总额相对上一个季度的销售总额的增持的百分比
   
    sum(sales)*100/sum(sales) over(order by year(sales_d),quarter(sales_d)
    rows between 1 preceding and 1 preceding)-100
   
   
db2 => select name,km,cj,sum(cj)*100/sum(cj) over(order by name,km,cj rows between 1 pre
ceding and 1 preceding)-100 as pct_change from test group by name,km,cj
NAME  KM    CJ          PCT_CHANGE
----- ----- ----------- -----------
lisi  eng            67           -
lisi  yuwen          73           8
zsan  eng            78           6
zsan  yuwen          80           2
zsan  shuxe          86           7
lisi  shuxe          90           4
  6 条记录已选择。
   
db2 => select name,km,cj,sum(cj) as tot,sum(cj)*100/sum(cj) over(order by cj row
s between 1 preceding and 1 preceding)-100 as pct_change from test group by name
,km,cj
NAME  KM    CJ          TOT         PCT_CHANGE
----- ----- ----------- ----------- -----------
lisi  eng            67          67           -
lisi  yuwen          73          73           8
zsan  eng            78          78           6
zsan  yuwen          80          80           2
zsan  shuxe          86          86           7
lisi  shuxe          90          90           4
  6 条记录已选择。

[ 本帖最后由 fengjin821 于 2009-6-19 18:54 编辑 ]
论坛徽章:
0
2#
发表于 2009-6-22 13:13 | 只看该作者
row
s between 1 preceding and 1 preceding

使用道具 举报

回复
论坛徽章:
0
3#
发表于 2009-6-22 13:13 | 只看该作者
不知是啥意思,请问下/LZ

使用道具 举报

回复
论坛徽章:
10
数据库板块每日发贴之星
日期:2009-06-04 01:01:02祖国60周年纪念徽章
日期:2009-10-09 08:28:002009日食纪念
日期:2009-07-22 09:30:00数据库板块每日发贴之星
日期:2009-06-28 01:01:02数据库板块每日发贴之星
日期:2009-06-15 01:01:02数据库板块每日发贴之星
日期:2009-06-14 01:01:02数据库板块每日发贴之星
日期:2009-06-09 01:01:02数据库板块每日发贴之星
日期:2009-06-07 01:01:02授权会员
日期:2009-06-06 10:43:16数据库板块每日发贴之星
日期:2010-12-01 01:01:01
4#
 楼主| 发表于 2009-6-22 14:25 | 只看该作者
sum(cj) over(order by cj rows between 1 preceding and 1 preceding)

是得到   上一行 cj的值

使用道具 举报

回复
论坛徽章:
0
5#
发表于 2013-7-22 09:58 | 只看该作者
楼主要是能加点解释就完美了。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表