我正在尝试创建一个返回商家名称的SQL查询。员工是团队的成员,团队,团队和团队的成员都是企业的成员。
我需要选择拥有员工的业务,这些员工是团队成员,具有一定的属性。
如何编写SQL以返回成员与高级成员比率为%的企业?前A队在100名队员中只有20名高级员工;所以它失败了,应该归还A队所属的业务。
我知道我需要根据他们的团队将员工聚集在一起,但不知何故需要计算对SENIOR = NO的SENIOR = YES的员工,并返回他们所属的业务。想法?
它们是MS Access表,其中包含一些敏感信息,但您可以将表格视为如下设置:
tblBusiness:BID,BName
tblTeam:TID,TName,TBusRef
tblEmployee:EID,EName,ETeamRef,EBusRef,ESenior
我真的尝试过各种各样的SQL:我已经完成了从嵌套SQL到重度聚合到包含count的表达式的所有工作。最接近的(我认为)我得到的是:
SELECT tblBuisiness.BName FROM tblBuisiness
GROUP BY BName HAVING (
COUNT(SELECT DISTINCT tblEmployee.ETeamRef FROM tblEmployee WHERE ESenior=-1)
/
COUNT(SELECT DISTINCT tblEmployee.ETeamRef FROM tblEmployee)
< 0.5
)
现在这个可能有语法错误(在剪贴板上),但我经历了100x,我得到的最接近的是“不能在agregate中表达”COUNT()/&lt; 0.5“”
如果Business1的TeamA有20位高级成员和80位普通成员,则此查询将返回Business1。
答案 0 :(得分:2)
也许:
SELECT *
FROM (
SELECT
e.EBusRef,
Count(e.EID) AS EmpCount,
Sum(Abs([ESenior])) AS Senior,
[Senior]/([EmpCount]/100) AS [%Senior]
FROM tblEmployee AS e
GROUP BY e.EBusRef) q
WHERE q.[%Senior]<=50
答案 1 :(得分:0)
这样的东西应该给你百分之。您只需要再次包装它以过滤SeniorPercentage字段
select
B1.BName,
SeniorPercentage = ((select count(1) from tblEmployee E1 inner join tblTeam T1 where T1.TBusRef = B1.BID and E1.ESenior = 1) / (select count(1) from tblEmployee E2 inner join tblTeam T2 where T2.TBusRef = B1.BID))
From
tblBusiness B1
PS我没有完全写入连接,但你可以轻松添加它。