永发信息网

oracle decode 问题

答案:4  悬赏:40  手机版
解决时间 2021-02-05 15:46
  • 提问者网友:辞取
  • 2021-02-05 11:40
用decode if 函数查询表中所有房产编号和地址以及所在城市的平均房价
如果房价大于均价,将“等级”列标为奢侈,如果小于或等于,则为普通

多谢~

表结构:
房产号 地址 城市 邮编 房型 租金

共6条数据,不要update,查询的时候加一列“等级”
6条数据都要返回

sorry,我们要求就是用decode.... 顺便说一下,城市平均房价是要用avg求的,表中没有
sorry,这个租金就是房价
最佳答案
  • 五星知识达人网友:话散在刀尖上
  • 2021-02-05 13:06
表结构,列几条数据
和你想要的结果
你是想update还是查询时加一列?
--补充--
你好像表里没有房价字段,只有个租金,请问,房价是在其他表里体现出来的吗?

select a.*,decode(sign(a.房租-b.房租),1,'奢侈','普通')
from 表名 a,
(select 城市,avg(房租) 房租 from 表名 group by 城市) b
where a.城市=b.城市
全部回答
  • 1楼网友:风格不统一
  • 2021-02-05 16:18
给个示例: SQL> select * from t ; ID CITY ---------- ---------- 1 A 2 A 3 B 1 A 2 A 3 B 6 B 4 B 8 rows selected SQL> SQL> SQL> select t1.city,t1.id,t2.avg_id,decode(ceil((t1.id-t2.avg_id)/t1.id),1,'奢侈','普通') 2 from 3 t t1, 4 (select avg(id) as avg_id ,city from t group by city) t2 5 where t1.city=t2.city ; CITY ID AVG_ID DECODE(CEIL((T1.ID-T2.AVG_ID)/ ---------- ---------- ---------- ------------------------------ A 2 1.5 奢侈 A 1 1.5 普通 A 2 1.5 奢侈 A 1 1.5 普通 B 4 4 普通 B 6 4 奢侈 B 3 4 普通 B 3 4 普通 8 rows selected
  • 2楼网友:底特律间谍
  • 2021-02-05 15:07
case when的实现: select case when sal>3000 then '奢侈' else '普通' end as dj,sal,ename from emp 和decode是一样的效果,decode是oracle的sql方言中特有的,而case是sql92标准写法,且case灵活性更大,decode只是很简短。 既然非要用decode,给你这段代码: sys@ORCL>select decode(sign(sal-2000),-1,'普通',0,'正常','奢侈'),sal from emp; DECO SAL ---- ---------- 奢侈 5000 正常 2000 正常 2000 正常 2000 正常 2000 正常 2000 正常 2000 正常 2000 正常 2000 正常 2000 正常 2000 普通 1000 正常 2000 正常 2000 正常 2000 已选择15行。 两种方法任你挑。
  • 3楼网友:琴狂剑也妄
  • 2021-02-05 14:32
select 房产号, 地址, 城市, 邮编, 房型, 租金, decode(sign(租金 - avg(t.租金) over(partition by 城市)), -1, '普通', 0, '普通', '1', '奢侈') 等级 from 表名 t
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯