为了账号安全,请及时绑定邮箱和手机立即绑定

SQL面试题,快来啊

/ 猿问

SQL面试题,快来啊

http://img.mukewang.com/5985af880001398d11840625.jpg

http://img.mukewang.com/5985af8e00017cbd13010201.jpg

图一是答案,图二是题目,详细解答下,最好详细到每句的含义,想对比下跟自己的理解的有哪些差异,谢谢哈!!!


查看完整描述

2 回答

?
书林路
select count(*) Total
/*统计Total表里所有的记录数*/

sum(decode(to_char(hiredate,'yyyy'),'1980',1,0)) ''1980''
/*decode(条件,值1,翻译值1,值2) 不太了解,
大概是一个转换格式的一个函数,如果第一个值为'yyyy',则翻译值为1,否则为0.
这一部分的意思是,对这列满足值为'1980'的记录每行值变为1,并用sum()函数进行求和,
并将显示结果的列取个别名 '1980',显示结果这列的求和值为1,说明只有1个记录满足.*/

--同理,后面的三个列也是sum()求和后的结果
sum(decode(to_char(hiredate,'yyyy'),'1981',1,0)) ''1981''
sum(decode(to_char(hiredate,'yyyy'),'1982',1,0)) ''1982''
sum(decode(to_char(hiredate,'yyyy'),'1987',1,0)) ''1987''

--整个语句的意思,现在就很明显了
/*搜索整个emp表,统计所有记录数,用Total列显示
分别用sum()函数来统计 1980、1981、1982、1987在表中存在的员工个数*/
select COUNT(*) Total,
sum(decode(to_char(hiredate,'yyyy'),'1980',1,0)) ''1980'',
sum(decode(to_char(hiredate,'yyyy'),'1981',1,0)) ''1981'',
sum(decode(to_char(hiredate,'yyyy'),'1982',1,0)) ''1982'',
sum(decode(to_char(hiredate,'yyyy'),'1987',1,0)) ''1987''
from emp


查看完整回答
反对 回复 2017-08-25
?
慕的地312744

我会用子查询,groupby

查看完整回答
反对 回复 2017-08-05

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信