根据一列

时间:2017-05-19 18:09:23

标签: sql sql-server

我刚开始在我的工作中检查SQL服务器,而我却无法解决这个问题。

假设我有这张表:

Model   Serial Pass   Failure  
Y72742  LURC1   0     Ref 5
Y72742  LURC2   0     Ref 10
Y72596  JDID1   1     EMT
Y72596  JDID2   1     EMT
Y72742  LURC3   0     Ref 10
Y72596  JDID3   0     Ref 5
Y72596  JDID4   0     Ref 18
Y72596  JDID5   1     EMT
Y72596  JDID6   0     Ref 18
Y72596  JDID7   0     Ref 5
Y72596  LURC4   1     UMT
Y72596  LURC5   1     UMT

因此在PASS列中,1表示单位通过,0表示失败。失败列表明失败的原因。

我正在努力完成这样的事情:

Model   Pass   Failed   Percentage
Y72742   2       3         40%
Y72596   1       4         20%

但由于是同一列,我无法完成它。

我尝试使用带有“AND”运算符的子查询,但是我遇到了错误。如果有人能帮助我,我将非常感激。

问候。

2 个答案:

答案 0 :(得分:3)

您可以使用SUMGROUP BY

构建查询
SELECT
    Model
,   SUM(case when Pass=1 then 1.0 else 0.0 end) AS Pass
,   SUM(case when Pass=1 then 0.0 else 1.0 end) AS Failed
,   100*SUM(case when Pass=1 then 1.0 else 0.0 end)/COUNT(*) AS Percentage
FROM MyTable
GROUP BY Model

答案 1 :(得分:0)

MySQL实施:

SELECT 
t.Model, 
SUM(IF(t.Pass=1,1,0)) as Passed, 
SUM(IF(t.Pass=0,1,0)) as Failed,
SUM(IF(t.Pass=1,1,0))/COUNT(t.Pass) as Percentage
FROM MyTable t 
GROUP BY t.Model