首页 > 试题广场 >

表A 员工编号(INT) 组别(VARCHAR) ...

[问答题]

A 员工编号(INT)   组别(VARCHAR)   项目(VARCHAR)   成绩(FLOAT)    完成时间(TIMESTAMP)

  100                        A                           XM1                      200.2                2018-08-10 21:00:00

  101                        B                           XM1                     100.6                 2018-06-10 21:00:00

  102                        A                           XM1                      50.0                  2018-07-10 21:00:00

  103                        B                           XM2                     100.0                 2018-08-15 21:00:00

  101                        B                           XM2                      99.1                  2018-07-30 21:00:00

  104                        B                           XM2                      46.5                  2017-09-14 21:00:00

(注释:一个人只能在1个小组,一个人可参与多个项目)

 1)统计各员工的绩效信息:

  员工编号  XM1成绩  XM1小组排名  XM2成绩  XM2小组排名

 2)统计各组完成时间在2018年第二季度各项目平均成绩达标(>80)人数:

组号  XM1达标人数 XM2达标人数
1)
select new1.员工编号, new1.XM1成绩 , new1.XM1小组排名,
new2.XM2成绩 , new2.XM2小组排名,
from
(select 员工编号,成绩 as XM1成绩,row_number() over ( order by 成绩) as XM1小组排名 from A where 项目 = ‘XM1’)  new1
join
(select 员工编号,成绩 as XM2成绩,row_number() over ( order by 成绩) as XM2小组排名 from A where 项目 = ‘XM2’)  new2
on new1.员工编号 = new2.员工编号

2)

SELECT 组别 as 组号,

    CASE WHEN 项目 = 'XM1'  and 平均成绩 > 80 THEN 人数 
    else 0  
    END AS XM1达标人数,
    CASE WHEN 项目 = 'XM2'  and 平均成绩 > 80 THEN 人数   
    else 0 
    END AS XM2达标人数   

 FROM

 
(select count(员工编号) as 人数 , 组别 , 项目,avg(成绩) as 平均成绩
from A  where 完成时间 between ‘2018-04-01’ and '2018-06-30'
group by 组别,项目
) new





编辑于 2019-04-07 23:56:09 回复(1)
我第一题跟你写得一样但是我看不懂参考答案
SELECT xm1.员工编号, XM1成绩, XM1小组排名, XM2成绩, XM2小组排名
FROM (
    SELECT 员工编号, 成绩 AS XM1成绩, DENSE_RANK() OVER(ORDER BY XM1成绩) AS XM1小组排名
    FROM A
    where 项目 = 'XM1';
) AS xm1 JOIN (
    SELECT 员工编号, 成绩 AS XM2成绩, DENSE_RANK() OVER(ORDER BY XM2成绩) AS XM2小组排名
    FROM A
    where 项目 = 'XM2';
) xm2 ON xm1.员工编号 = xm2.员工编号;

发表于 2023-04-06 12:25:47 回复(0)