我的表里有一个字段存放资料,设置的是不能为空,
但是有时资料会缺值,就用999999,六个9代表缺的资料了。
这样的话,还能用AVG函数计算这个字段的平均吗?怎么才能不把999999算进去?
会不会我开始设计的不对,应该设为可以为空,如果可以为空的话,AVG函数就会跳过空值吧?(另外,怎么看自己剩余的分数啊,晕,没找到)谢谢!
但是有时资料会缺值,就用999999,六个9代表缺的资料了。
这样的话,还能用AVG函数计算这个字段的平均吗?怎么才能不把999999算进去?
会不会我开始设计的不对,应该设为可以为空,如果可以为空的话,AVG函数就会跳过空值吧?(另外,怎么看自己剩余的分数啊,晕,没找到)谢谢!
解决方案 »
- 如何把台式机上oracle 10g的数据库“mysjk”复制到我新买的笔记本上(都windows)
- oracle 10g RAC 一台被fence
- 修改某一字段数据的问题
- 数据库移植,急,在线等。
- SQL语句不执行的奇怪问题
- Oracle错误提示:VTK-1000:无法连接到Management Server yl。请验证您已输入Oracle Management Server 的正确主机名和状态。在线等待!
- 操作系统损坏,ORACLE数据可以恢复吗?
- toad恢复数据库的问题
- 100分提问:将'123,456,7,9234'分离成123 456 7 9234
- 新手上路,求一个触发器的写法
- 我要在已有的包中创建一个Procedure
- 关于转义字符,被弄晕了,大家帮我看看
avg(字段,'999999,null,字段值)
假设
字段 a
999999
1
2
3
4
5
用avg(decode(a,'999999',null,a))
出来就是平均1-5的
select 1 as v from dual
union select 2 from dual);
--返回1.5
select avg(v) from(
select null as v from dual
union select 2 from dual);
--返回2
select avg(decode(v,99999,null,v)) from(
select 99999 as v from dual
union select 2 from dual);
--返回2
select avg(decode(a,999999,null,a))
from (
select 999999 a from dual
union all
select 1 from dual
union all
select 2 from dual
union all
select 3 from dual
union all
select 4 from dual
union all
select 5 from dual)结果
3
如果你字段是varchar2格式,就用avg(decode(a,'999999',null,a))
如果是number 就用
avg(decode(a,999999,null,a))
怎么前面一个a,后面又是一个a呢?是什么意思呀
如果a=b则返回c否则返回d
decode 判断条件 a字段
如果a字段=999999,输出 null
否则输出 a字段的内容
假设表的数据为
999999
1
2
3
4
5
用select decode(a,999999,null,a)) from table
的结果就是
a
(值为null)
1
2
3
4
5
再avg一下,出为就是3