12
返回列表 发新帖
楼主: flzhang

如何用sql实现这个高难度的排序需求

[复制链接]
论坛徽章:
0
11#
发表于 2017-2-13 11:42 | 只看该作者
本帖最后由 notou413 于 2017-2-13 11:49 编辑

create table ot_HOUR as
select '部门编号1' dept, 2 value from dual union all
select '部门编号2',4 from dual union all
select '部门编号3',5 from dual union all
select '部门编号4',10 from dual union all
select '部门编号5',13 from dual union all
select '部门编号6',17 from dual union all
select '部门编号7',25 from dual;

create table departMENTS as
select 'TEAM1' team, '部门编号1' dept from dual union all
select 'TEAM1', '部门编号2' from dual union all
select 'TEAM1', '部门编号3' from dual union all
select 'TEAM2', '部门编号4' from dual union all
select 'TEAM2', '部门编号5' from dual union all
select 'TEAM3', '部门编号6' from dual union all
select 'TEAM4', '部门编号7' from dual;

SELECT /*T1.DEPT,T2.TEAM,*/NVL(T1.DEPT, T2.TEAM) DEPT_TEAM , SUM(T1.VALUE) sums
  FROM OT_HOUR T1, DEPARTMENTS T2
WHERE T1.DEPT = T2.DEPT(+)
GROUP BY GROUPING SETS((T1.DEPT),(T2.TEAM))
ORDER BY SUMS,T1.DEPT,T2.TEAM;

DEPT_TEAM       SUMS
--------- ----------
部门编号1          2
部门编号2          4
部门编号3          5
部门编号4         10
TEAM1             11
部门编号5         13
部门编号6         17
TEAM3             17
TEAM2             23
部门编号7         25
TEAM4             25
11 rows selected

使用道具 举报

回复
论坛徽章:
0
12#
发表于 2017-2-13 11:46 | 只看该作者

九叔,看看我11楼写的答案怎样。

使用道具 举报

回复
求职 : 数据库管理员
招聘 : Java研发
论坛徽章:
6402
娜美
日期:2021-10-12 20:11:36技术图书徽章
日期:2021-09-30 12:11:1120周年集字徽章-年	
日期:2021-09-30 12:12:5820周年集字徽章-20	
日期:2021-09-30 12:43:0619周年集字徽章-周
日期:2021-09-30 13:18:3120周年集字徽章-20	
日期:2021-09-30 16:44:1219周年集字徽章-周
日期:2021-09-30 17:01:04技术图书徽章
日期:2021-09-30 17:59:14技术图书徽章
日期:2021-10-06 10:36:4019周年集字徽章-19
日期:2021-10-06 14:43:24
13#
发表于 2017-2-13 13:49 | 只看该作者
notou413 发表于 2017-2-13 11:46
九叔,看看我11楼写的答案怎样。

没满足人家要求吧..

使用道具 举报

回复
论坛徽章:
0
14#
发表于 2017-2-13 14:04 | 只看该作者
本帖最后由 notou413 于 2017-2-13 14:14 编辑
2009532140 发表于 2017-2-13 13:49
没满足人家要求吧..

哦,我理解到的需求是 多个部门分别有各自加班时间,然后部门和TEAM的关系是多对多,所以再按照分组汇总排序。这里的 部门和TEAM的加班时间是分别的吗?还是需要加上一个RN?
SELECT /*T1.DEPT,T2.TEAM,*/
NVL(T1.DEPT, T2.TEAM) DEPT_TEAM,
SUM(T1.VALUE) SUMS,
DENSE_RANK() OVER(ORDER BY SUM(T1.VALUE)) RN
  FROM OT_HOUR T1, DEPARTMENTS T2
WHERE T1.DEPT = T2.DEPT(+)
GROUP BY GROUPING SETS((T1.DEPT),(T2.TEAM))
ORDER BY SUMS, T1.DEPT, T2.TEAM;


DEPT_TEAM           SUMS         RN
------------- ---------- ----------
部门编号1              2          1
部门编号2              4          2
部门编号3              5          3
部门编号4             10          4
TEAM1                 11          5
部门编号5             13          6
部门编号6             17          7
TEAM3                 17          7
TEAM2                 23          8
部门编号7             25          9
TEAM4                 25          9
11 rows selected


使用道具 举报

回复
求职 : 数据库管理员
招聘 : Java研发
论坛徽章:
6402
娜美
日期:2021-10-12 20:11:36技术图书徽章
日期:2021-09-30 12:11:1120周年集字徽章-年	
日期:2021-09-30 12:12:5820周年集字徽章-20	
日期:2021-09-30 12:43:0619周年集字徽章-周
日期:2021-09-30 13:18:3120周年集字徽章-20	
日期:2021-09-30 16:44:1219周年集字徽章-周
日期:2021-09-30 17:01:04技术图书徽章
日期:2021-09-30 17:59:14技术图书徽章
日期:2021-10-06 10:36:4019周年集字徽章-19
日期:2021-10-06 14:43:24
15#
发表于 2017-2-13 15:43 | 只看该作者
notou413 发表于 2017-2-13 14:04
哦,我理解到的需求是 多个部门分别有各自加班时间,然后部门和TEAM的关系是多对多,所以再按照分组汇总 ...

不对吧,你看看他的结果,跟你的也不一样啊

使用道具 举报

回复
论坛徽章:
0
16#
发表于 2017-2-13 16:54 | 只看该作者
2009532140 发表于 2017-2-13 15:43
不对吧,你看看他的结果,跟你的也不一样啊

我初始化的数据和他的不一样。
他说的多个部门属于一个TEAM,但是提供的数据 TEAM1的12.5 没有看到是哪几个部门构成的。
我假设部门和TEAM的关系是:
部门1,部门2,部门3属于TEAM1;
部门4,部门5           属于TEAM2;
部门6                      属于TEAM3;
部门7                      属于TEAM4;
所以再按照部门,TEAM汇总得到结果。

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表