今日看到一题不会做:还请大家帮帮忙!!TKS
题目描述如下:员工表:user(id,pay,departid)
部门表:depart(id,name)1.要求得到每个部门的总工资数,统计的记录放到表userSum(id,paysum,departname)中,最好用一条SQL语句实现.(我不知道如何将统计结果放到userSum表中)
2.查询每个部门不同工资区间人数:如
         3000以下    3000-4000   4000-5000  5000以上
服务部    200        100          400         200
人事部    ...        ...          ...         ...
研发部
.....以上每个表中的id都为自动增长:
谢谢!!

解决方案 »

  1.   

    1 insert into usersum
      select b.id,
             sum(a.pay),
             b.name
      from user a,departid b
      where a.departid=b.id
      group by b,id,b.name
      
      

  2.   

    2select b.name,
           sum(case when a.pay<3000 then 1 else 0 end) "3000以下",
           sum(case when a.pay>=3000 and a.pay<4000 then 1 else 0 end) "3000-4000",
            sum(case when a.pay>=4000 and a.pay<5000 then 1 else 0 end) "4000-5000", 
           sum(case when a.pay>=5000 then 1 else 0 end) "5000 以上"
             
             
      from user a,departid b
      where a.departid=b.id
      group by b.name
      

  3.   

    Try it ..
    SQL> select * from users;      U_ID        PAY   DEPARTID
    ---------- ---------- ----------
             1       2000          1
             2       8000          2
             3       6200          3
             4       3000          1
             5       5500          1
             6       3000          1
             7       5100          2
             8       3600          3
             9       2800          39 rows selected
    SQL> select * from depart;       DID DNAME
    ---------- --------------
             1 service
             2 human_resource
             3 development
    SQL> select d.dname,
    2       sum((case
    3             when pay < 3000 then
    4             1
    5             else
    6              0
    7           end)) less_3000,
    8       sum((case
    9             when pay >= 3000 and pay < 4000 then
    10              1
    11            else
    12              0
    13           end)) between_3000_4000,
    14       sum((case
    15             when pay >= 4000 and pay < 5000 then
    16              1
    17             else
    18              0
    19           end)) between_4000_5000,
    20       sum((case
    21             when pay > 5000 then
    22              1
    23             else
    24              0
    25           end)) large_5000
    26    from users u, depart d
    27   where u.departid = d.did
    28   group by d.dname;
    DNAME           LESS_3000 BETWEEN_3000_4000 BETWEEN_4000_5000 LARGE_5000
    -------------- ---------- ----------------- ----------------- ----------
    service                 1                 2                 0          1
    human_resource          0                 0                 0          2
    development             1                 1                 0          1
      

  4.   

    1:  insert into userSum         
     select d.id,
            sum(u.pay) as paysum,
            d.name as departname
       from user u,
            depart d
      where u.departid = d.id
      group by d.id,
               d.name;
      
      

  5.   

    select t2.name,
           sum(case
                 when t1.pay < 3000 then
                  1
                 else
                  0
               end) "3000以下",
           sum(case
                 when t1.pay >= 3000 and t1.pay < 4000 then
                  1
                 else
                  0
               end) "3000-4000",
           sum(case
                 when t1.pay >= 4000 and t1.pay < 5000 then
                  1
                 else
                  0
               end) "4000-5000",
           sum(case
                 when t1.pay >= 5000 then
                  1
                 else
                  0
               end) "5000 以上"  from user t1, departid t2
     where t1.departid = t2.id
     group by t2.name