现有一个视图V1,其执行后结果可能为如下格式:
一级单位ID 二级单位ID 员工数
101 10001 1
101 10002 3
102 10003 2
102 10005 4
103 10004 7现在需要对此视图的查询结果进行统计,可能是按一级单位,也可能是按二级单位进行分组,要求取得SUM(员工数)最大的前两条记录,请问这个SQL语句除了 select * from (select 一级单位ID,SUM(员工数) from V1 group by 一级单位ID order by SUM(员工数)) where rownum <= 2 这样写之外,有没有其他写法?因为小弟现在在用公司前辈写好的一些数据访问模块编程,所有的查询语句都是以XML形式组织的,因此需要尽量避免查询中嵌套子查询,因为如果需要有类似上面的子查询的话就需要建视图了,比较麻烦,所以想请问各位大拿有没有其他方法可以实现,谢谢了,问题解决马上给分
一级单位ID 二级单位ID 员工数
101 10001 1
101 10002 3
102 10003 2
102 10005 4
103 10004 7现在需要对此视图的查询结果进行统计,可能是按一级单位,也可能是按二级单位进行分组,要求取得SUM(员工数)最大的前两条记录,请问这个SQL语句除了 select * from (select 一级单位ID,SUM(员工数) from V1 group by 一级单位ID order by SUM(员工数)) where rownum <= 2 这样写之外,有没有其他写法?因为小弟现在在用公司前辈写好的一些数据访问模块编程,所有的查询语句都是以XML形式组织的,因此需要尽量避免查询中嵌套子查询,因为如果需要有类似上面的子查询的话就需要建视图了,比较麻烦,所以想请问各位大拿有没有其他方法可以实现,谢谢了,问题解决马上给分
101 10001 1
101 10001 1
101 10002 3
101 10001 2
101 10003 1
102 10004 2
102 10004 2
102 10005 2
102 10006 4
103 10007 7要取每个一级单位下,员工数最多的二级单位及其员工数,如:
101 10001 4
101 10002 3
102 10004 4
102 10006 4
103 10007 7这种情况下适合用分析函数:
SELECT *
FROM (SELECT 一级单位ID,二级单位ID,
SUM(员工数),
row_number() over(PARTITION BY 一级单位ID ORDER BY SUM(员工数) DESC) rn
FROM V1
GROUP BY 一级单位ID, 二级单位ID
ORDER BY SUM(员工数))
WHERE rn <= 2