SQL 中达到和未达到目标的比率
Ratio of target met and not met in SQL
Table Emp
EmployeeID Target_status
1 Achieved
2 Not achieved
5 Not Achieved
6 Achieved
3 Achieved
4 Not Achieved
Table 网站
EmpID Site
1 SiteA
2 SiteB
3 SiteA
4 SiteA
5 SiteA
6 SiteA
如何找到站点 A 中达到目标的人数与未达到目标的人数的比率(答案:3/2)
尝试过的代码:
(select cast(count(a.Target_status)/count(d.Target_status) as float)
from Emp a
inner join Site b on a.EmployeeId = b.EmpId
where Site = 'SiteA' and a.Target_status='Achieved' ) e
full outer join
(
(select * from Emp a
inner join Site b on a.EmployeeId = b.EmpId
where Site = 'SiteA' and a.Target_status='Not Achieved' ) d
on e.employeeID=d.empid
错误:
Msg 156, Level 15, State 1, Line 9
Incorrect syntax near the keyword 'full'.
Msg 102, Level 15, State 1, Line 13
Incorrect syntax near 'd'.
谁能帮忙
您可以使用条件聚合:
SELECT 1.0 * SUM(CASE WHEN e.Target_status = 'Achieved' THEN 1 ELSE 0 END) /
SUM(CASE WHEN e.Target_status = 'Not Achieved' THEN 1 END) ratio
FROM Emp e INNER JOIN Site s
ON e.EmployeeId = s.EmpId
WHERE s.Site = 'SiteA';
并不是说第二个 SUM()
中的 CASE
表达式没有 ELSE
部分,因此如果没有 Target_status = 'Not Achieved'
的员工,结果将是 NULL
而不是 0
会引发“除以零错误”。
参见demo。
你可以通过简单的方式获得它
select CAST(SUM(CASE WHEN a.Target_status='Achieved' THEN 1 ELSE 0 END) AS VARCHAR) +'/'+CAST(SUM(CASE WHEN a.Target_status='Not Achieved' THEN 1 ELSE 0 END) AS VARCHAR) Ratio
from Emp a
inner join Site b on a.EmployeeId = b.EmpId
where Site = 'SiteA'
这将return
3/2
Table Emp
EmployeeID Target_status
1 Achieved
2 Not achieved
5 Not Achieved
6 Achieved
3 Achieved
4 Not Achieved
Table 网站
EmpID Site
1 SiteA
2 SiteB
3 SiteA
4 SiteA
5 SiteA
6 SiteA
如何找到站点 A 中达到目标的人数与未达到目标的人数的比率(答案:3/2)
尝试过的代码:
(select cast(count(a.Target_status)/count(d.Target_status) as float)
from Emp a
inner join Site b on a.EmployeeId = b.EmpId
where Site = 'SiteA' and a.Target_status='Achieved' ) e
full outer join
(
(select * from Emp a
inner join Site b on a.EmployeeId = b.EmpId
where Site = 'SiteA' and a.Target_status='Not Achieved' ) d
on e.employeeID=d.empid
错误:
Msg 156, Level 15, State 1, Line 9
Incorrect syntax near the keyword 'full'.
Msg 102, Level 15, State 1, Line 13
Incorrect syntax near 'd'.
谁能帮忙
您可以使用条件聚合:
SELECT 1.0 * SUM(CASE WHEN e.Target_status = 'Achieved' THEN 1 ELSE 0 END) /
SUM(CASE WHEN e.Target_status = 'Not Achieved' THEN 1 END) ratio
FROM Emp e INNER JOIN Site s
ON e.EmployeeId = s.EmpId
WHERE s.Site = 'SiteA';
并不是说第二个 SUM()
中的 CASE
表达式没有 ELSE
部分,因此如果没有 Target_status = 'Not Achieved'
的员工,结果将是 NULL
而不是 0
会引发“除以零错误”。
参见demo。
你可以通过简单的方式获得它
select CAST(SUM(CASE WHEN a.Target_status='Achieved' THEN 1 ELSE 0 END) AS VARCHAR) +'/'+CAST(SUM(CASE WHEN a.Target_status='Not Achieved' THEN 1 ELSE 0 END) AS VARCHAR) Ratio
from Emp a
inner join Site b on a.EmployeeId = b.EmpId
where Site = 'SiteA'
这将return
3/2