求一个SQL语句,求高效的思路,在线等。

enaking 2019-05-28 06:53:40
有表Dept(DeptId,DeptName.......),Emp(DeptId,EmpId,EmpName),Sell(EmpId,SellId,Money)

现在要统计出如下记录
部门名称,部门人数,销售单数,销售金额。
第一小组 5 50 50000
第二小组 7 80 120000
我想的是分组去统计,但这个应该要嵌入分组查询吧。就是select * from (select * from .... group by ...) group by ... 这样吧,有没有更高效的办法,主要数据大,并且要带有及时性,并且数据变化也很频繁,所以领导否定了事先定时统计。请问还有没有更高的效率的办法。谢谢
...全文
126 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2019-05-29
  • 打赏
  • 举报
回复
引用 3 楼 enaking 的回复:
你这样是不行的,这样Count(e.EmpID)和Count(s.SellId)是相同的,因为都表示查询到的记录条数
灵活运用distinct select d.DeptName as 部门名称 ,Count(distinct e.EmpID) as 部门人数 ,Count(distinct s.SellId) as 销售单数 ,Sum(m.Money) as 销售金额 from Dept d left join Emp e on d.DeptID=e.DeptID left join Sell s on e.EmpID=s.EmpID group by d.DeptName
enaking 2019-05-29
  • 打赏
  • 举报
回复
看这样子,是不是只能嵌入了,因为我只是举了一个例子,我这个表关系,不止三层,一共有六层,那是不是要嵌入5次,我试过了,速度太慢了啊。
诗和远方C 2019-05-29
  • 打赏
  • 举报
回复
with total as(
select DEPT.DEPTNAME , SELL.EMPID,SELL.SELLID,SELL.MONEY,EMP.EMPNAME from sell,emp,dept
where SELL.EMPID=EMP.EMPID and EMP.DEPTID=DEPT.DEPTID
)
select a.DEPTNAME,a.人数,b.单数,c.金额 from
(select DEPTNAME,count(EMPID) as 人数 from( select distinct TOTAL.DEPTNAME,TOTAL.EMPID from total ) group by DEPTNAME)a,
(select TOTAL.DEPTNAME,sum( total.SELLID)单数 from total group by DEPTNAME)b,
(select TOTAL.DEPTNAME,sum( total.MONEY)金额 from total group by DEPTNAME)c
where a.DEPTNAME=b.DEPTNAME and a.DEPTNAME=c.DEPTNAME
order by DEPTNAME


最终目标是第X分组的各项数据,我写的total可能因为表太大查的太慢了,要查询3个子表的感觉,第一个表查出来第x组,有多少人,第二个表查第x组,卖了多少单,第三个表查
第X组卖了多少金额。拙见
ManBOyyy 2019-05-29
  • 打赏
  • 举报
回复
select * from (select * from 表 where 條件 group by ...) group by ...

在裡面先查完條件再左右鏈接
wilson1966 2019-05-29
  • 打赏
  • 举报
回复
你加入年度和月份后,速度应会加快
enaking 2019-05-29
  • 打赏
  • 举报
回复
引用 1 楼 正怒月神 的回复:
手打的,不太确定
select d.DeptName as 部门名称
,Count(e.EmpID) as 部门人数
,Count(s.SellId) as 销售单数
,Sum(m.Money) as 销售金额
from Dept d
left join Emp e on d.DeptID=e.DeptID
left join Sell s on e.EmpID=s.EmpID
group by d.DeptName


你这样是不行的,这样Count(e.EmpID)和Count(s.SellId)是相同的,因为都表示查询到的记录条数
enaking 2019-05-29
  • 打赏
  • 举报
回复
引用 1 楼 正怒月神 的回复:
手打的,不太确定
select d.DeptName as 部门名称
,Count(e.EmpID) as 部门人数
,Count(s.SellId) as 销售单数
,Sum(m.Money) as 销售金额
from Dept d
left join Emp e on d.DeptID=e.DeptID
left join Sell s on e.EmpID=s.EmpID
group by d.DeptName

你这样是不行的,这样Count(e.EmpID)和Count(s.SellId),因为都表示查询到的记录条数
正怒月神 2019-05-28
  • 打赏
  • 举报
回复
手打的,不太确定
select d.DeptName as 部门名称
,Count(e.EmpID) as 部门人数 
,Count(s.SellId) as 销售单数
,Sum(m.Money) as 销售金额
from Dept d
left join Emp e on d.DeptID=e.DeptID
left join Sell s on e.EmpID=s.EmpID
group by d.DeptName
oracle数据库的性能优化直接关系到系统的运行效率,而影响数据库性能的一个重要因素就是sql性能问题。本书是作者十年磨一剑的成果之一,深入分析与解剖oracle sql优化与调优技术,主要内容包括: 第一篇“执行计划”详细介绍各种执行计划的含义与操作,为后面的深入分析打下基础。重点讲解执行计划在sql语句执行的生命周期中所处的位置和作用,sql引擎如何生成执行计划以及如何获取sql语句的执行计划,如何从各种数据源显示和查看已经生成的执行计划。 第二篇“sql优化技术”深入分析oracle的sql优化技术,包括逻辑优化技术和物理优化技术。用大量示例详尽分析oracle 中现有的各种查询转换技术,先分析oracle如何收集、统计系统和对象的数据,然后推导各种代价估算公式,给出各种情形下的代价计算演示。 第三篇“sql调优技术”深入剖析oracle提供的各项调优技术。先对语句实际运行的性能统计数据进行了深度分析,介绍各项统计数据是由什么操作导致的以及如何统计。然后介绍如何对sql语句进行优化以获得稳定、高效的性能。最后,依据对sql优化及调优技术的分析,介绍如何快速优化sql的思路。 《oracle 高性能sql引擎剖析:sql优化与调优机制详解》内容丰富且深入,破解了oracle技术的很多秘密,适合oracle数据库管理员、应用开发人员参考。

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧