求一个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 ... 这样吧,有没有更高效的办法,主要数据大,并且要带有及时性,并且数据变化也很频繁,所以领导否定了事先定时统计。请问还有没有更高的效率的办法。谢谢
...全文
133 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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

111,098

社区成员

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

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

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