select rq,(如果这里写上xm,max(n)就没效果),max(n) from (select rq,(select xm from ryb r,jkjl j where r.gh=j.gh)xm,max(n) from (select extract(year from rq) rq ,r.xm,
(sum(case when fx=0 then je else 0 end)-sum(case when fx=1 then je else 0 end)) n
from jkjl j,ryb r where j.gh=r.gh group by r.xm,extract(year from rq))group by rq)group by rq题目是:查询每年累计金额(累计金额=收款- 付款)最多的人,生成如下结果的报表:(5分)
年 姓名 累计金额
2006 张先生 2750.25
2007 王小姐 10.00 或者还有其他好办法吗sql
(sum(case when fx=0 then je else 0 end)-sum(case when fx=1 then je else 0 end)) n
from jkjl j,ryb r where j.gh=r.gh group by r.xm,extract(year from rq))group by rq)group by rq题目是:查询每年累计金额(累计金额=收款- 付款)最多的人,生成如下结果的报表:(5分)
年 姓名 累计金额
2006 张先生 2750.25
2007 王小姐 10.00 或者还有其他好办法吗sql
sum(decode(fx,0,je,0)-decode(fx,1,je,0)) n
from ..
group by rq,xm
补充下 意思是要查出 这样的 select rq,xm,max(sum(累计收款金额)-sum(付出累计金额))
from jkjl group by rq,xm
max()里面已经有sum了不能嵌套了 吧他作为结果集再加MAX效果还是一样
select to_char(rq,'yyyy') rq,xm,n
from
(
select rq,xm,n,row_number() over(partiton by to_char(rq,'yyyy') order by n desc) rn
from
(
select rq,xm,
sum(decode(fx,0,je,0)-decode(fx,1,je,0)) n
from jkjl
group by rq,xm
)
)
where rn = 1
order by to_char(rq,'yyyy')
感谢大神 结果出来了 另外over里面貌似那个单词打错了。。 难怪运行老是错。。
就是不明白的是 over是什么意思 为什么rn=1 就 把最高金额的筛选出来了
失误失误了、 纯手工回复的 难免几个打错..over 开窗函数 在oracle里面经常会用到 功能非常强大 LZ可以百度研究下 最里面一层 是求每个人每天累计金额
中间一层是根据年份分组 按累计金额倒排序 rn就是排名金额最高排第一
最外面一层 就是取所有排名第一的数据 也就是每年排第一的人和金额
失误失误了、 纯手工回复的 难免几个打错..over 开窗函数 在oracle里面经常会用到 功能非常强大 LZ可以百度研究下 最里面一层 是求每个人每天累计金额
中间一层是根据年份分组 按累计金额倒排序 rn就是排名金额最高排第一
最外面一层 就是取所有排名第一的数据 也就是每年排第一的人和金额谢谢了 虽然rn=1 的原理还没搞懂, 下次再仔细研究研究