如何计算统计值 的百分比呢?

shiter
人工智能领域优质创作者
博客专家认证
2018-06-21 12:23:07
加精
如何计算统计值 的百分比呢?
...全文
4043 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
riven2011 2019-10-08
  • 打赏
  • 举报
回复
引用 4 楼 桃花岛黄岛主 的回复:

select ratio_to_report(SHULIANG) over () zb ,t.* from t


这个就是最简单的
AHUA1001 2019-10-07
  • 打赏
  • 举报
回复
直接执行这个 WITH T AS ( SELECT 'V' STATUS,41 SHULIANG FROM DUAL UNION ALL SELECT 'C' STATUS,699 SHULIANG FROM DUAL UNION ALL SELECT 'D' STATUS,19 SHULIANG FROM DUAL UNION ALL SELECT 'J' STATUS,172 SHULIANG FROM DUAL) SELECT T.*,SHULIANG/SUM(SHULIANG) OVER(ORDER BY 1 )*100 "百分百(实际值)", ROUND(SHULIANG/SUM(SHULIANG) OVER(ORDER BY 1 )*100,2) "百分百(保留两位小数)" FROM T ;
qq_40150322 2018-07-05
  • 打赏
  • 举报
回复
先看下再说,不过应该是不错的
huyue2019 2018-06-24
  • 打赏
  • 举报
回复
数据在哪里啊,我看不到
NinjaYinJey 2018-06-22
  • 打赏
  • 举报
回复
select a,(b / (select sum(b) from t)) from t
老王就是我 2018-06-22
  • 打赏
  • 举报
回复
sum不就行了?
  • 打赏
  • 举报
回复
应该sum()over()能搞
shiter 2018-06-21
  • 打赏
  • 举报
回复
"STATUS","SHULIANG"
"V","41"
"C","699"
"D","19"
"J","172"

比如我想计算数量这一列占所有数量的百分比,41/sum(shuliang), sql 怎么写啊,老报错啊,求大牛
nayi_224 2018-06-21
  • 打赏
  • 举报
回复
41/sum(shuliang) over() ?
shiter 2018-06-21
  • 打赏
  • 举报
回复
我是想问标准sql 怎么写?
桃花岛黄岛主 2018-06-21
  • 打赏
  • 举报
回复

select ratio_to_report(SHULIANG) over () zb ,t.* from t
shiter 2018-06-21
  • 打赏
  • 举报
回复
引用 2 楼 baidu_36457652 的回复:
不是吧,你把数据贴出来瞅瞅

楼上就是数据啊
  • 打赏
  • 举报
回复
不是吧,你把数据贴出来瞅瞅
卖水果的net 2018-06-21
  • 打赏
  • 举报
回复

SQL>
SQL> create table test(s varchar(10), v int);
Table created
SQL> begin
2 insert into test values('V','41');
3 insert into test values('C','699');
4 insert into test values('D','19');
5 insert into test values('J','172');
6 end;
7 /
PL/SQL procedure successfully completed
SQL> col v format a10;
SQL> -- 大数据量下,方法二有优势
SQL> select s, v, v * 1.0 / sum(v) over() V1 from test;
S V V1
---------- ---------- ----------
V 41 0.04403866
C 699 0.75080558
D 19 0.02040816
J 172 0.18474758
SQL> select s, v, v * 1.0 / (select sum(v) from test) V2 from test;
S V V2
---------- ---------- ----------
V 41 0.04403866
C 699 0.75080558
D 19 0.02040816
J 172 0.18474758
SQL> drop table test purge;
Table dropped

SQL>
nayi_224 2018-06-21
  • 打赏
  • 举报
回复
select t.*, t.SHULIANG / (select sum(SHULIANG) from t) from t;
select t.*, t.SHULIANG / t2.su from t, (select sum(SHULIANG) su from t) t2;

标准sql不清楚,不过这两种写法应该很通用。
xiaocang0510 2018-06-21
  • 打赏
  • 举报
回复
select STATUS ,SHULIANG,41/sum(shuliang) over() from 表
shiter 2018-06-21
  • 打赏
  • 举报
回复
引用 6 楼 nayi_224 的回复:
41/sum(shuliang) over() ?


引用 7 楼 baidu_36457652 的回复:
应该sum()over()能搞


引用 8 楼 wmxcn2000 的回复:
可以用 sum() over() ,也可以使用一个子查询计算出这个总计。


请问标准sql 有over函数么?能否用标准sql 解决这个问题,子查询么?
卖水果的net 2018-06-21
  • 打赏
  • 举报
回复
可以用 sum() over() ,也可以使用一个子查询计算出这个总计。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧