oracle查询 求百分比

wattor 2009-07-01 02:20:22
Oracle数据库中,一个表有两个字段,所有数量(allnum),成功数量(sucessnum),都是long类型的
select allnum,sucessnum from mytabl;

现在想在查询处增加一列:成功率(用百分比,小数点保留两位数字)

select allnum,sucessnum,sucessnum/allnum from mytabl; 这样不能实现我想要的效果
...全文
2466 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jun1100 2011-07-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 a89723253 的回复:]
我同意四楼的,但在正常情况下allnum不会为0,如果非正常情况呢,所以我做了一下改动
select allnum,SUCESSNUM,decode(allnum 0,0,round((SUCESSNUM/allnum)*100,2)||'%') percent from t3;
[/Quote]

这个貌似有点问题.
Richard345265669 2009-07-02
  • 打赏
  • 举报
回复
RoundZ就可以了
a89723253 2009-07-02
  • 打赏
  • 举报
回复
我同意四楼的,但在正常情况下allnum不会为0,如果非正常情况呢,所以我做了一下改动
select allnum,SUCESSNUM,decode(allnum 0,0,round((SUCESSNUM/allnum)*100,2)||'%') percent from t3;
cab1225 2009-07-01
  • 打赏
  • 举报
回复
SQL> select * from t3;

ALLNUM SUCESSNUM
---------- ----------
88 43
53 20
57 23
76 21

SQL> select allnum,SUCESSNUM,round((SUCESSNUM/allnum)*100,2)||'%' percent from t3;

ALLNUM SUCESSNUM PERCENT
---------- ---------- -----------------------------------------
88 43 48.86%
53 20 37.74%
57 23 40.35%
76 21 27.63%

SQL>

SQL> select * from t3;

ALLNUM SUCESSNUM
---------- ----------
88 43
53 20
57 23
76 21

SQL> select allnum,SUCESSNUM,round((SUCESSNUM/allnum)*100,2)||'%' percent from t3;

ALLNUM SUCESSNUM PERCENT
---------- ---------- -----------------------------------------
88 43 48.86%
53 20 37.74%
57 23 40.35%
76 21 27.63%

SQL>

SQL> select * from t3;

ALLNUM SUCESSNUM
---------- ----------
88 43
53 20
57 23
76 21

SQL> select allnum,SUCESSNUM,round((SUCESSNUM/allnum)*100,2)||'%' percent from t3;

ALLNUM SUCESSNUM PERCENT
---------- ---------- -----------------------------------------
88 43 48.86%
53 20 37.74%
57 23 40.35%
76 21 27.63%

SQL>

csuxp2008 2009-07-01
  • 打赏
  • 举报
回复
方法一:select allnum,sucessnum,to_char((sucessnum/allnum)*100,'99D99')||'%' from mytabl;
方法二:select allnum,SUCESSNUM,round((SUCESSNUM/allnum)*100,2)||'%' 成功率 from mytabl;

两种方法均可,我已测试过
wjwwj33 2009-07-01
  • 打赏
  • 举报
回复
select allnum,sucessnum,to_char(100 * sucessnum/allnum, 'fm99999990.00') || '%' from mytabl
wattor 2009-07-01
  • 打赏
  • 举报
回复
楼上的太细致了,佩服
hyrongg 2009-07-01
  • 打赏
  • 举报
回复

SQL> select * from t3;

ALLNUM SUCESSNUM
---------- ----------
88 43
53 20
57 23
76 21

SQL> select allnum,SUCESSNUM,round((SUCESSNUM/allnum)*100,2)||'%' percent from t3;

ALLNUM SUCESSNUM PERCENT
---------- ---------- -----------------------------------------
88 43 48.86%
53 20 37.74%
57 23 40.35%
76 21 27.63%

SQL>
csuxp2008 2009-07-01
  • 打赏
  • 举报
回复
上面的错了,更正一下:

select allnum,sucessnum,to_char((sucessnum/allnum)*100,'99D99')||'%' from mytabl;


csuxp2008 2009-07-01
  • 打赏
  • 举报
回复

select allnum,sucessnum,to_char(sucessnum/allnum,'99D99')||'%' from mytabl;

试试看
bw555 2009-07-01
  • 打赏
  • 举报
回复
select allnum,sucessnum,
round(sucessnum*100/allnum,2)||'%' as 成功率
from mytabl;
Oracle分析函数——函数列表 SUM :该函数计算组中表达式的累积和 MIN :在一个组中的数据窗口中查找表达式的最小值 MAX :在一个组中的数据窗口中查找表达式的最大值 AVG :用于计算一个组和数据窗口内表达式的平均值。 COUNT :对一组内发生的事情进行累积计数 ------------------------------------------------------------------------------------------------- RANK :根据ORDER BY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置 DENSE_RANK :根据ORDER BY子句中表达式的值,从查询返回的每一行,计算它们与其它行的相对位置 FIRST :从DENSE_RANK返回的集合中取出排在最前面的一个值的行 LAST :从DENSE_RANK返回的集合中取出排在最后面的一个值的行 FIRST_VALUE :返回组中数据窗口的第一个值 LAST_VALUE :返回组中数据窗口的最后一个值。 LAG :可以访问结果集中的其它行而不用进行自连接 LEAD :LEAD与LAG相反,LEAD可以访问组中当前行之后的行 ROW_NUMBER :返回有序组中一行的偏移量,从而可用于按特定标准排序的行号 ------------------------------------------------------------------------------------------------- STDDEV :计算当前行关于组的标准偏离 STDDEV_POP:该函数计算总体标准偏离,并返回总体变量的平方根 STDDEV_SAMP:该函数计算累积样本标准偏离,并返回总体变量的平方根 VAR_POP :该函数返回非空集合的总体变量(忽略null) VAR_SAMP :该函数返回非空集合的样本变量(忽略null) VARIANCE :如果表达式中行数为1,则返回0,如果表达式中行数大于1,则返回VAR_SAMP COVAR_POP :返回一对表达式的总体协方差 COVAR_SAMP :返回一对表达式的样本协方差 CORR :返回一对表达式的相关系数 ------------------------------------------------------------------------------------------------- CUME_DIST :计算一行在组中的相对位置 NTILE :将一个组分为"表达式"的散列表示 PERCENT_RANK :和CUME_DIST(累积分配)函数类似 PERCENTILE_DISC :返回一个与输入的分布百分比值相对应的数据值 PERCENTILE_CONT :返回一个与输入的分布百分比值相对应的数据值 RATIO_TO_REPORT :该函数计算expression/(sum(expression))的值,它给出相对于总数的百分比 REGR_ (Linear Regression) Functions :这些线性回归函数适合最小二乘法回归线,有9个不同的回归函数可使用

17,090

社区成员

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

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