标题:sql 题目求解答
只看楼主
yanweibin
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-4-16
结帖率:100%
已结贴  问题点数:20 回复次数:8 
sql 题目求解答
一车间下有数名员工,这些员工在一段时间内加工某几种零件,现有如下三张表:
员工表(STAFF)
(STAFF_ID:员工工号,STAFF_NAME:姓名)
零件字典表(ZD_PRODUCT)
(PRODUCT_ID:零件ID,PRODUCT_NAME:零件名称)
产量表(FACT_PRODUCE)
(STAFF_ID: 员工工号,PRODUCT_ID:零件ID,PRODUCE_NUM:产量)
(1)查询“001”零件比“002”零件产量高的所有员工工号和姓名

(2)查询零件平均产量大于60的员工工号和平均产量;

(3)查询所有员工工号、姓名、零件加工种类数、总产量;

(4)查询没加工过“001”零件的员工工号、姓名;

(5)查询加工过“001”并且也加工过编号“002”零件的员工工号、姓名;

(6)统计列印各零件的产量,各产量段人数:
零件ID, 零件名称,[100-85],[85-70],[70-60],[ <60]

(7)查询各零件加工量前三名的记录:(不考虑加工量并列情况)
零件ID, 零件名称, 员工工号、姓名,产量

(8)按平均产量从高到低显示所有员工的“零件1”、“零件2”、“零件3”三种零件的产量,按如下形式显示:
员工工号,员工姓名, 零件1, 零件2, 零件3 , 平均产量

(9)查询各零件产量最高和最低的员工:以如下形式显示:
零件ID,零件名称,最高产量,最低产量

(10)查询每种零件的平均产量,结果按平均产量升序排列,平均产量相同时,按工号降序排列
搜索更多相关主题的帖子: 员工 姓名 名称 查询 平均 
2018-04-16 17:20
yanweibin
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-4-16
得分:0 
哪位大神能帮忙解答下吗?跪谢了!!!!!!!
2018-04-17 10:35
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:14 
你不会1题都不会吧。
2018-04-17 22:33
yanweibin
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-4-16
得分:0 
有什么参考材料学了就会做的也行啊,哪位大神给点,W3school上的sql资料都看完了,怎么觉得还是不能正确做出题目来。
2018-04-18 09:06
yanweibin
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-4-16
得分:0 
版主,麻烦抽空解答几题也行啊,我研究下。我1题都不会呢。
2018-04-18 11:16
yanweibin
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-4-16
得分:0 
版主也不会吧??
帮忙回答几题也行啊。
2018-04-19 11:56
mywisdom88
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
/*
-- 建立员工测试数据
create table #员工表(工号 varchar(5),姓名 varchar(10))
insert into #员工表
select 'A0001','张三' union all
select 'A0002','李四' union all
select 'A0003','王五' union all
select 'A0004','赵六' union all
select 'A0005','刘七'

-- 建立零件测试数据
create table #零件表(零件ID varchar(5),零件名称 varchar(20))
insert into #零件表
select '001','零件1' union all
select '002','零件2' union all
select '003','零件3' union all
select '004','零件4' union all
select '005','零件5'

-- 建立产量测试数据
create table #产量表(工号 varchar(5),零件ID varchar(5),产量 int)
insert into #产量表
select 'A0001','001',85 union all
select 'A0001','002',84 union all
select 'A0002','001',62 union all
select 'A0002','002',55 union all
select 'A0003','002',58 union all
select 'A0004','001',50 union all
select 'A0005','001',50 union all
select 'A0005','002',60

*/

--select * from #员工表
--select * from #零件表
--select * from #产量表

--(1)查询“001”零件比“002”零件产量高的所有员工工号和姓名
-- 方法1,用关联
select a.工号,c.姓名,a.产量,b.产量
 from (select 工号,产量 from #产量表 where 零件ID='001') as a
 inner join (select 工号,产量 from #产量表 where 零件ID='002') as b
 on a.工号=b.工号 and a.产量>b.产量
 inner join #员工表 as c on a.工号=c.工号

-- 方法2,用where
select a.工号,c.姓名,a.产量,b.产量
 from (select 工号,产量 from #产量表 where 零件ID='001') as a,
      (select 工号,产量 from #产量表 where 零件ID='002') as b,#员工表 as c
 where a.工号=b.工号 and a.产量>b.产量 and a.工号=c.工号

--(2)查询零件平均产量大于60的员工工号和平均产量
-- 方法1
select a.工号,a.平均产量
 from (select 工号,avg(cast(产量 as numeric(10,2))) as 平均产量 from  #产量表 group by 工号)a
 where a.平均产量>60

-- 方法2
select 工号,avg(cast(产量 as numeric(10,2))) as 平均产量 from  #产量表
group by 工号 having avg(cast(产量 as numeric(10,2))) >60


--(3)查询所有员工工号、姓名、零件加工种类数、总产量
select a.工号,b.姓名,a.类数,a.总产量
 from (select 工号,count(零件ID)as 类数,sum(产量) as 总产量 from  #产量表 group by 工号) as a
 inner join #员工表 as b on a.工号=b.工号


--(4)查询没加工过“001”零件的员工工号、姓名;
-- 方法1
select a.工号,a.姓名 from #员工表 a
 where a.工号 not in(select 工号 from #产量表 where 零件ID = '001')

-- 方法2
select a.工号,a.姓名 from #员工表 a
 where not exists(select 工号 from #产量表 where 零件ID = '001'and a.工号=工号)


--(5)查询加工过“001”并且也加工过编号“002”零件的员工工号、姓名;
select a.工号,a.姓名 from #员工表 a
inner join (select 工号 from #产量表 where 零件ID = '001')b on a.工号=b.工号
inner join (select 工号 from #产量表 where 零件ID = '002')c on a.工号=c.工号

--(6)统计列印各零件的产量,各产量段人数:
select 零件ID,
 [100-85人数] =sum(case when 产量 <= 100 and 产量 >=85 then 1 else 0 end) ,
 [85-70人数] =sum(case when 产量 <85 and 产量 >=70 then 1 else 0 end) ,
 [70-60人数] =sum(case when 产量 <70 and 产量 >=60 then 1 else 0 end) ,
 [<60人数] =sum(case when 产量 <60 then 1 else 0 end),
 [100-85产量] =sum(case when 产量 <= 100 and 产量 >=85 then 产量 else 0 end) ,
 [85-70产量] =sum(case when 产量 <85 and 产量 >=70 then 产量 else 0 end) ,
 [70-60产量] =sum(case when 产量 <70 and 产量 >=60 then 产量 else 0 end) ,
 [<60产量] =sum(case when 产量 <60 then 产量 else 0 end)
from #产量表
group by 零件ID


--(7)查询各零件加工量前三名的记录:(不考虑加工量并列情况)
select c.零件ID,d.零件名称,b.工号,b.姓名,c.产量,排名
 from (select 工号,零件ID,产量,排名=(select count(产量)+1 as 排名 from #产量表 where a.零件ID=零件ID and a.产量<产量)
       from #产量表 a)c
 inner join #员工表 b on c.工号=b.工号 and c.排名<=3
 inner join #零件表 d on c.零件ID=d.零件ID
 order by c.零件ID,c.产量 desc

2018-04-19 17:08
yanweibin
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2018-4-16
得分:0 
版主,你好厉害啊,真崇拜你,你写的好像我读懂了,原来sql语句是这么用,一般书上都没有这样的例子。
2018-04-19 17:36
yan794937546
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-4-24
得分:0 
2018-04-24 15:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-486115-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.068931 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved