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怎么写? 展开
 我来答
qijian_306
2012-10-09 · TA获得超过113个赞
知道答主
回答量:79
采纳率:0%
帮助的人:85.9万
展开全部
用分析函数可以解决。
给你一个简单的例子,假设表 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) ;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
BuddhaQQ
2012-10-09 · TA获得超过1762个赞
知道小有建树答主
回答量:860
采纳率:100%
帮助的人:964万
展开全部
1. 返回的列(值)是否需要排序
2. 如果没有正好等于,比如取到29行到了899,但在取一行到902,无法正好到900
需要定义好规则,是允许小于还是大于(比如极端情况,1000行中任何数据组合都无法正好等于90%的数值时)
3. 建议用存储过程(PROCEDURE)完成,这样的逻辑需求,一个SQL不太容易实现
等LZ追问,再进一步解答
追问
要大于,怎么写?用存储过程怎么写?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无辜的悲伤鬼
2012-10-10 · TA获得超过183个赞
知道答主
回答量:279
采纳率:0%
帮助的人:92.9万
展开全部
期待楼下给出详细答案
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式