大神有吗 帮忙解释下decode函数

qq2691612999 2016-07-30 01:22:42
上面的这个是表 然后有个问题 就是 decode函数 是什么意思 具体怎么用的 希望 有大神用直白的方法告诉我 本人读书少 百度了很多资料 依然不了解

1.职工表:Employee:
ID Name Department Job Email Password
10000 李明 SBB
10001 李筠平 LUK
11045 李洁 SBB
10044 胡斐 MTD
10009 徐仲刚 SBB
10023 李燕 SBB
20460 陆明生 MTD
20078 张青 MMM
20001 李立 LUK


3、统计出各部门的人数和各部门姓“李”的人数,用一条SQL语句完成。
select department,count(department),sum(decode(name,1,1),'李',1,0))from employee group by department;


为什么sum(decode(name,1,1),'李',1,0)) 这里一定要这样写呢 具体什么含义呢 里面的 1什么意思 0又是什么意思呢 希望有大神帮忙详细讲解下
骚年只是想了解个清楚 这个题目的答案是我百度过来的


骚年这里拜谢了
...全文
703 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
js14982 2016-08-01
  • 打赏
  • 举报
回复
和case when ... then ...用法差不多
ghx287524027 2016-08-01
  • 打赏
  • 举报
回复
group by department;先对部门分组,count(*) 是统计出每个分组的人数,也就是每个部门的人数;sum(decode(substr(name,1,1),'李',1,0)) 中首先利用substr(name,1,1)截取姓名中的姓,然后将其值与 ,'李' 比较,如果是 ‘李’ 则返回 1 ,如果不是 ‘李’ 则返回 0.然后利用sum() 函数对返回值求和,这样也就计算出了每个部门中姓李的人数~
com_jia 2016-08-01
  • 打赏
  • 举报
回复
正常情况下什么函数都使用查表的话数据库会把数据一条一条给你返回到界面, select id,name from class; id name 1 lili 2 lisi 3 zhangsan 如果你使用一个函数的话, 比如 to_char(id) 数据库查数据的话会把每行数据的id字段进行使用to_char()函数处理了一下将处理结果返回回来。 现在使用 decode(id,1,A,2,B,C)就是 数据库把每行数据的id交给decode函数来处理,但是decode怎么处理呢?就要看里边传的参数列,decode(str1,str2,str3,str4),str1指的是你要处理的字段,其中str2和str3相当于一个组合,str2指的是判断条件,就是你要处理的参数等不等于这个值,str3的值是如果等于str2的话就返回的值,这个组合可以写多个(例如我例子里1,A就是一个组合,2,B也是一个组合,我还可以加上3,D,4,E等等,根据需要来写),str4的值是如果前边不符合任何一个组合就返回的值,要不然数据库就不知道返回什么了,对吧,就像例子里decode(id,1,A,2,B,C),字段先判断一下是不是等于1是的话就返回A,等于2就返回B......以此类推,如果都不符合,就返回C, select decode(id,1,‘A’,2,'B','C') id ,name from class; id name A lili =====>因为id=1所以返回的结果是A B lisi =====>因为id=2所以返回的结果是B C zhangsan =====>因为id=3,不符合前边任何一个条件,所以返回的结果是C
qq2691612999 2016-07-31
  • 打赏
  • 举报
回复
答案复制错误了
qq2691612999 2016-07-31
  • 打赏
  • 举报
回复
select department,count(*) 部门人数, sum(decode(substr(name,1,1),'李',1,0)) 姓李的人数 from employee group by department;
ghx287524027 2016-07-31
  • 打赏
  • 举报
回复
decode() 函数其实就是嵌套的if else。
卖水果的net 2016-07-30
  • 打赏
  • 举报
回复
sum(decode(name,1,1),'李',1,0)) 这个写法是不对的,你数一下 () 是不是能配上对,估计你的语句没有贴完整; decode 的用法如下: decode(源值 , v1, r1 , v2, r2) -- 这里是 5个参数 当 源值 = v1 时,返回 r1 ,当 源值 = v2 时,返回 r2 , 当不满足这两个条件时,返回 NULL 或 decode(源值 , v1, r1 , v2, r2,r_others ) -- 这里是 6 个参数 当 源值 = v1 时,返回 r1 ,当 源值 = v2 时,返回 r2 ,当不满足这两个条件时,返回 r_others v1,r1 这些要成对出现;

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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