ORACLE怎么实现前多少列的和等于这些列所有值的和的90%
比如说100行,列se的所有值的和为1000,我现在需要得到其中的90%,也就是900,se的值从大到小取值,知道取得的值等于900为止,30行我就要30行,20行就要2...
比如说100行,列se的所有值的和为1000,我现在需要得到其中的90%,也就是900,se的值从大到小取值,知道取得的值等于900为止,30行我就要30行,20行就要20行,只要前多少行的数据相加为所有列的90%为止。用SQL怎么写?
展开
3个回答
展开全部
用分析函数可以解决。
给你一个简单的例子,假设表 test1 有两个字段 ID 和 salary。
可以这么写这个语句:
select id , salary from
(select id , salary,
sum(salary) over (order by salary desc, id) sum1
from test1) a1
where a1.sum1 <= (select sum(salary)* 0.9 from test1) ;
给你一个简单的例子,假设表 test1 有两个字段 ID 和 salary。
可以这么写这个语句:
select id , salary from
(select id , salary,
sum(salary) over (order by salary desc, id) sum1
from test1) a1
where a1.sum1 <= (select sum(salary)* 0.9 from test1) ;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1. 返回的列(值)是否需要排序
2. 如果没有正好等于,比如取到29行到了899,但在取一行到902,无法正好到900
需要定义好规则,是允许小于还是大于(比如极端情况,1000行中任何数据组合都无法正好等于90%的数值时)
3. 建议用存储过程(PROCEDURE)完成,这样的逻辑需求,一个SQL不太容易实现
等LZ追问,再进一步解答
2. 如果没有正好等于,比如取到29行到了899,但在取一行到902,无法正好到900
需要定义好规则,是允许小于还是大于(比如极端情况,1000行中任何数据组合都无法正好等于90%的数值时)
3. 建议用存储过程(PROCEDURE)完成,这样的逻辑需求,一个SQL不太容易实现
等LZ追问,再进一步解答
追问
要大于,怎么写?用存储过程怎么写?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
期待楼下给出详细答案
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询