面试程序员SQL题目?哪位大哥大姐帮我看看 这怎么做? 谢谢
SQL试题2
一、
教师号 星期号 是否有课
1 2 有
1 3 有
2 1 有
3 2 有`
1 2 有
写一条sql语句让你变为这样的表
教师号 星期一 星期二 星期三
1 2 1
2 1
3 1
各星期下的数字表示:对应的教师在星期几已经排的课数
二、
书表(books)
book_id,book_name,creatdate,Lastmodifydate,decription
001,三个人的世界,2005-02-02,2005-07-07,NULL
作者表(authors)
A_id,A_name
01,王纷
02,李尚
03,泰和
部门表(depts)
d_id,d_name
001,编辑一部
002,编辑二部
003,编辑三部
书和作者关联表(bookmap)
book_id,A_id
001,01
001,02
001,03
部门和作者关联表(depmap)
d_id,a_id
001,01
002,02
003,03
找出每个部门的所写的总书两,比如,一本书有3个人写,如果三个人在不同的部门,则每个部门的总数量就是1.最后结果如下:
部门,书量
编辑一部,1
编辑二部,1
编辑三部,1
三、
两个表情况
表名:wu_plan
ID plan model corp_code plannum prixis
1 00001 exx22 nokia 2000 0
2 00002 lc001 sony 3000 0
表名:wu_bom
ID plan pact amount
1 00001 aa1 300
2 00001 aa2 200
3 00002 bb1 500
4 00002 bb2 800
5 00002 bb3 400
查询这两个表中plan唯一,每一个plan中,amount最少的,plannum大于prixis的记录
结果是:
ID plan model corp_code plannum prixis pact amount
1 00001 exx22 nokia 2000 0 a2 200
2 00002 lc001 sony 3000 0 bb3 400
四、
表1结构如下:
部门 条码 品名 销售额 销售数量 销售日期
表2结构如下
课别 部门
要求:先按部门排序,再按销售额、销售数量排序检索出某个课别每个部门一个时期内的商品销售额的前三名,如查询01课别2007年4月15日到2007年4月22日每个部门一个周内的商品销售额合计的前三名
[解决办法]
来个oracle的
select 教师号,count(decode(星期号,1,1,null)) as 星期一,
count(decode(星期号,2,1,null)) as 星期二,
count(decode(星期号,3,1,null)) as 星期三 from table
where 是否有课= '有 '
group by 教师号
select d.d_name,count(book_id) from (select b.book_id,dm.d_id from books b,bookmap bm,depmap dm
where bm.book_id=b.book_id and bm.A_id=dm.A_id group by b.book_id,dm.d_id) a,depts d
where a.d_id=d.d_id
group by d_name
select w.*,wb.pact,wb.amount from (select wb.* from wu_bom wb
where amount=(select min(amount) from wu_bom where wb.plan=plan group by wu_bom)) w,
(select * from wu_plan where plannum > prixis) wp
where w.plan=wb.plan
select a.*,b.课别,row_number() over(partition by b.课别 order by sum(销售额) desc) as rn from 表1 a,表2 b
where a.部门=b.部门
and b.课别= '01 '
and a.销售日期 between '2007/4/15 ' and 2007/4/22/
and rn <=3
个人感觉不是实际中碰到的,为了表结构符合范式,导致表数量增加,尤其是第2题
增大了查询时的困难
以上纯属个人意见