现有员工表t_staff
staff_id(员工标识)  staff_name(员工名称)  dept_id(部门标识)  希望能统计出每个部门的人数,和部门里员工标识最小的3个员工的名字,他们的名字用逗号连接起来。如何用一次分组就把这些信息求出来?

解决方案 »

  1.   


    -try it 
    select dept_id, cn, wm_concat(start_name)
      from (select staff_id,
                   staff_name,
                   dept_id,
                   count(*) over(partition by dept_id order by 1) cn,
                   row_number() over(partition by dept_id order by staff_id) rn
              from t_staff)
     where rn <= 3
     order by dept_id, cn
      

  2.   


    ----------写错了,应该是group by
    select dept_id, cn, wm_concat(start_name)
      from (select staff_id,
                   staff_name,
                   dept_id,
                   count(*) over(partition by dept_id order by 1) cn,
                   row_number() over(partition by dept_id order by staff_id) rn
              from t_staff)
     where rn <= 3
     group by dept_id, cn
      

  3.   


    select dept_id,wm_concat(staff_name) staff_name,max(cnt) cnt
    from (select dept_id,staff_name,
    row_number() over(partition by dept_id order by staff_id) rn,
    count(*) over(partition by dept_id order by dept_id) cnt
    from t_staff)
    group by dept_id
      

  4.   


    --一次是不可能select dept_id,wm_concat(staff_name) staff_name,max(cnt) cnt
    from (select dept_id,staff_name,
    row_number() over(partition by dept_id order by staff_id) rn,
    count(*) over(partition by dept_id order by dept_id) cnt
    from t_staff)
    where rn<=3
    group by dept_id