mysql数据库求:表中合计销售额需要占全体销售额80%\\\"结果展示ID,名称,销售额

image.png建表语句:

create table sql2008(产品id int,产品名称 varchar(50),销售额 int);

insert into sql2008 values(1,'A',100);

insert into sql2008 values(2,'B',300);

insert into sql2008 values(3,'C',200);

insert into sql2008 values(4,'D',400);

insert into sql2008 values(5,'E',50);

insert into sql2008 values(6,'F',500);

insert into sql2008 values(7,'G',600);

用户DZNws0326467 发布于 2022-4-13 13:27 (编辑于 2022-4-13 13:36)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
snrtuemcLv8专家互助
发布于2022-4-13 13:37
最佳回答
0
CD20160914Lv8专家互助
发布于2022-4-13 13:29(编辑于 2022-4-13 13:29)

最终要的结果是如何的???是单个产品的,还是依次累计求和的时候???没有太明白最终要什么结果

  • 用户DZNws0326467 用户DZNws0326467(提问者) 图片为最终结果
    2022-04-13 13:36 
  • CD20160914 CD20160914 回复 用户DZNws0326467(提问者) 为什么是 7 6 4 2这四个产品,标准是什么,没有明白。。
    2022-04-13 13:53 
  • 用户DZNws0326467 用户DZNws0326467(提问者) 回复 CD20160914 题面的意思应该是没有标准的 就最终结果的产品占比加起来是80%
    2022-04-13 14:04 
  • CD20160914 CD20160914 回复 用户DZNws0326467(提问者) 你自己计算一下。。。哪里是你模拟出来的结果了。。没有懂
    2022-04-13 14:05 
最佳回答
0
krystal033Lv7高级互助
发布于2022-4-13 13:38(编辑于 2022-4-13 13:39)

select  *, (select sum(销售额) from sql2008 ) 合计, 销售额*1.0/(select sum(销售额) from sql2008 ) 占比  from sql2008

这样吗

image.png

  • 用户DZNws0326467 用户DZNws0326467(提问者) 不是 只显示id 名称 销售额 ,而且 是占比合计为80%的数据
    2022-04-13 13:41 
  • krystal033 krystal033 回复 用户DZNws0326467(提问者) 啥叫 占比合计为80%的数据 举个例子
    2022-04-13 13:42 
  • 用户DZNws0326467 用户DZNws0326467(提问者) 回复 krystal033 就最终结果的产品占比加起来是80%
    2022-04-13 14:04 
  • krystal033 krystal033 回复 用户DZNws0326467(提问者) 参考二楼的方法
    2022-04-13 14:10 
最佳回答
0
shinger@126.comLv2见习互助
发布于2022-4-13 18:04

这个是用于计算销售二八原则的吧,计算占销售80%的都是那些货品,按销售额倒序排

MSSQL的语法:

declare @I INT 

SELECT @I=SUM(销售额)*0.8 FROM sql2008

;WITH T AS (SELECT *,SUM(销售额) OVER(ORDER BY 销售额 DESC) 累计销售额,

             ROW_NUMBER() over(order by 销售额 DESC) 序号 FROM sql2008 )

select * from T where 序号<=(select top 1 序号 from T where 累计销售额>=@I order by 序号)

MYSQL我不大熟悉,不过思路是这样的

最佳回答
0
fiskerLv4见习互助
发布于2022-4-13 21:58(编辑于 2022-4-13 22:29)

他这个问题是这样的:

目前数据库中显示的所有已插入数据是因变量,自变量是一个未知的a,b,c,...,求a,b,c,...等于多少时,显示的合计值等于已插入销售额数据的80%,可以参考帆软实例中的盈亏销售额分析的例子

列成方程

(A*a+B*b+C*c+D*d+E*e+F*f+G*g)>=  80%*(A+B+C+D+E+F+G)

隐形条件

(A*a+B*b+C*c+D*d+E*e+F*f+G*g)<=  (A+B+C+D+E+F+G)

简单来说,这是一个递归函数的求固定值解的过程,不建议在msyql中做

按照你提供的数据求解的结果:

规划秋节.png

如果完全按照截图上的数据比例和数据完整要求,结果如下:

规划秋求解.png

如果在mysql中,参考思路为,将所有销售额从大到小排列,并求出所有销售额的总和,每次将排列后的销售额的第一个数据与第二位相加,然后与销售额总和进行比较,直到累计值大于等于销售额总和80%时停止累计,并将所有参与累计过程的销售额按照ID,名称,销售额进行展示

另外由于mysql8之后才有开窗函数,所以肯定采用存储过程比子查询的方式更效率,但是mysql与帆软在存储过程方面的结合有一定的问题(mysql权限的设定没有专门针对存储过程,非要赋权的话会造成权限过大的安全隐患)

根据需求场景的硬性要求,自行选择合理的搭配方案

  • 6关注人数
  • 433浏览人数
  • 最后回答于:2022-4-13 22:29
    请选择关闭问题的原因
    确定 取消
    返回顶部