SQL 根据两列取最大值求和
发布网友
发布时间:2022-04-11 08:31
我来回答
共2个回答
热心网友
时间:2022-04-11 10:01
create table _20131118
(
"金额" number,
"年" varchar2(4),
"月" varchar2(2)
);
insert into _20131118
select 32000,'2011','10' from al
union all
select 63000,'2011','11' from al
union all
select 55000,'2011','12' from al
union all
select 73000,'2012','10' from al
union all
select 84500,'2012','11' from al
union all
select 96000,'2012','12' from al
union all
select 75000,'2013','8' from al
union all
select 89000,'2013','9' from al
union all
select 65500,'2013','10' from al;
select sum(金额) 总额
from (select row_number()over(partition by 年 order by 金额 desc)rn,t.* from _20131118 t)tab
where rn=1
结果:
总额
248000
select sum(sm)总额 from (select distinct max(金额)over(partition by 年 order by 年)sm from _20131118)t;
结果:
总额
248000
追问不对啊,结果应该是216500啊 而且我用你第二条语句的时候 在SQL 08 R2下报错,提示 'order' 附近有语法错误
追答
哦 我看错你的问题了 我以为是按金额最大的呢,那个月是什么类型的,是数字类型么,如果不是要进行类型转换,上面第二句是oracle的写法呢。
如果你是sqlserver的话这样写
select sum(金额) 总额
from (select row_number()over(partition by 年 order by convert(int,月) desc)rn,t.* from _20131118 t)tab
where rn=1
如果你是oracle的话这样写
select sum(金额) 总额
from (select row_number()over(partition by 年 order by to_number(月,'999999') desc)rn,t.* from _20131118 t)tab
where rn=1
热心网友
时间:2022-04-11 11:19
第一,没说什么数据库
第二,年月两个字段类型
暂且按sqlserver,年月字段都是字符来
select * from 表名
where 年+'00'+left(月,2)
in
select max(年+'00'+left(月,2)) from 表名 group by 年