sql面试题,请大神解答,急!!!
tableA(地区表)colA(地区id)colB(上级地区id)colC(地区名称)tableB(人员情况表)colD(人员ic)colE(人员名称)colA(所属地区...
tableA(地区表)
colA(地区id) colB(上级地区id)colC(地区名称)
tableB(人员情况表)
colD(人员ic) colE(人员名称) colA(所属地区) colG(人员成本) colH(性别)
1.全国所有人员成本最高的第10名到第20名。
2.所有人员成本总和大于2000的市,按照成本合计由高到低顺序。
3.输入一个地区id,在sql中使用?代替,查询这个地区所有本下级地区包含人数总和,输出格式:地区名称,人数。例如,输入国家id,则输出全国所有市区人数之和;输入北京id,则输出北京所有市区之和;输入海淀区id,则输出这个区人数之和。
4.假设tableA中数据固定为示例数据,性别1为男,0为女。查询输出:
北京 上海
男 所有人数之和 所有人数之和
女 所有人数之和 所有人数之和 展开
colA(地区id) colB(上级地区id)colC(地区名称)
tableB(人员情况表)
colD(人员ic) colE(人员名称) colA(所属地区) colG(人员成本) colH(性别)
1.全国所有人员成本最高的第10名到第20名。
2.所有人员成本总和大于2000的市,按照成本合计由高到低顺序。
3.输入一个地区id,在sql中使用?代替,查询这个地区所有本下级地区包含人数总和,输出格式:地区名称,人数。例如,输入国家id,则输出全国所有市区人数之和;输入北京id,则输出北京所有市区之和;输入海淀区id,则输出这个区人数之和。
4.假设tableA中数据固定为示例数据,性别1为男,0为女。查询输出:
北京 上海
男 所有人数之和 所有人数之和
女 所有人数之和 所有人数之和 展开
1个回答
展开全部
第一题,最高的10-20。
1234 select * from (select colD,colE,dense_rank() over(order by colG desc) as rk from tableb) where rk between 10 and 20 --当然面试的话这里可以注明 dense_rank 和 rank区别等等。
第二题,2楼写的就可以了
第三题,注意题目是人数之和
12345 select count(*) as cnt from tableB where colA in (select colA from tableA start with colA = 传入idconnect by prior colA = colB)
第四题
--测试数据
with tableA as (select 1 as colA,0 as colB,'北京' as colC from dualunion allselect 2 as colA,0 as colB,'上海' from dual),tableB as(select 1 as colD,'人员1' as colE,1 as colA,2000 as colG,0 as colH from dualunion allselect 2,'人员2',1,2000,0 from dualunion allselect 3,'人员3',1,2000,0 from dualunion allselect 4,'人员4',1,2000,0 from dualunion allselect 5,'人员5',1,2000,1 from dualunion allselect 6,'人员6',2,2000,1 from dualunion allselect 7,'人员7',1,2000,1 from dual)--查询sql select decode(t.colH,0,'女','男') as gender,max(decode(t.colC,'北京',t.cnt,0)) as 北京,max(decode(t.colC,'上海',t.cnt,0)) as 上海 from (select a.colC,b.colH,count(*) as cnt from tableB bleft join tableA a on a.colA = b.colAgroup by colC,colH) t group by t.colH
这里可以解释下本sql的思路:--首先查出每个地区不同性别的人数,在行转列(由于题目很明显告诉你固定数据)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |