You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL计算SiteA员工目标达成与未达成人数比例 语法错误求助

错误排查

你写的SQL存在以下问题:

  1. 语法结构错误:没有外层SELECT语句就直接对两个子查询执行JOIN操作,同时第二个子查询外层多了未闭合的左括号,导致语法报错
  2. 作用域错误:第一个子查询内部直接引用了第二个子查询的别名d,该别名不在第一个子查询的可识别范围内
  3. 逻辑错误:不需要用FULL OUTER JOIN实现人数比值统计,你的查询逻辑完全偏离了先统计两类人数再计算比值的需求

正确实现方案

方案1:条件聚合(推荐,仅需一次表关联,执行效率最高)

SELECT 
  CAST(
    SUM(CASE WHEN Target_status = 'Achieved' THEN 1 ELSE 0 END) 
    AS FLOAT
  ) / SUM(CASE WHEN Target_status = 'Not Achieved' THEN 1 ELSE 0 END) AS achieve_ratio
FROM Emp
INNER JOIN Site ON Emp.EmployeeID = Site.EmpID
WHERE Site.Site = 'SiteA';

执行后返回结果为1.5,即你需要的3/2的比值。

方案2:子查询分别统计(和你最初的思路更贴近)

SELECT 
  CAST(achieve_count AS FLOAT) / not_achieve_count AS achieve_ratio
FROM 
  (
    SELECT COUNT(*) AS achieve_count 
    FROM Emp 
    INNER JOIN Site ON Emp.EmployeeID = Site.EmpID
    WHERE Site.Site = 'SiteA' AND Emp.Target_status = 'Achieved'
  ) t_achieve,
  (
    SELECT COUNT(*) AS not_achieve_count 
    FROM Emp 
    INNER JOIN Site ON Emp.EmployeeID = Site.EmpID
    WHERE Site.Site = 'SiteA' AND Emp.Target_status = 'Not Achieved'
  ) t_not_achieve;

注:如果你的数据库中Target_status字段存在大小写不一致的情况,可以用UPPER(Target_status)或者LOWER(Target_status)统一转换后再做条件匹配,避免统计遗漏。

内容的提问来源于stack exchange,提问作者noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:15:03