SQL:计算输出列上发生的次数,并根据出现次数计算一些百分比

时间:2012-07-02 20:58:42

标签: mysql sql

我的sql查询获取固件的错误修复验证列表,例如: def-456是一张要求我测试产品固件测试的票。 def-456有几个子任务,其中记录了结果。结果记录为:id:abc-123,abc-124,abc-125等(如下表所示)。这些相应的id具有“通过”或“失败”结果。我需要计算两个值----> 1.尝试次数:在下面的示例中,尝试次数为3/5,有3次传递,2次失败(即传递/传递+失败),这里我可以使用count()方法但是不知道如何追加“/ 5”和 2.第一次尝试成功率:在下面的例子中,abc-123失败然而abc-124通过,abc-125失败但是abc-126通过而abc-127没有任何失败,意味着我的成功率是:1 out 3(即1/3),如何在sql中显示这些值?这有点棘手,我无法为此找到逻辑。

以下是def-456的数据:

    value | id| 
    --------------
    fail | abc-123  
    pass | abc-124   
    fail | abc-125   
    pass | abc-126   
    pass | abc-127  

这是o / p我试图显示:

id   |   value | attempts| %for attempts  | 1st attempt
----------------------------------------------------
abc-123    fail |   3/5  | 60%              | 1/3
abc-124    pass |   3/5  | 60%              | 1/3
abc-125    fail |   3/5  | 60%              | 1/3
abc-126    pass |   3/5  | 60%              | 1/3
abc-127    pass |   3/5  | 60%              | 1/3

1 个答案:

答案 0 :(得分:3)

我相信这就是你所需要的:

SELECT
    a.id,
    a.resolution,
    b.*
FROM 
    Table1 a
CROSS JOIN
    (
        SELECT
            CONCAT(SUM(aa.resolution = 'pass'), '/', COUNT(*)) AS attempts,
            CONCAT((SUM(aa.resolution = 'pass') / COUNT(*)) * 100, '%') AS percent_attempts,
            CONCAT(SUM(bb.mindate IS NOT NULL AND resolution = 'pass'), '/', SUM(resolution = 'pass')) AS first_attempt 
        FROM
            Table1 aa
        LEFT JOIN 
            (
                SELECT 
                    MIN(`date`) AS mindate 
                FROM 
                    Table1
            ) bb ON aa.`date` = bb.mindate
    ) b

SQLFiddle Link