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

Posted

技术标签:

【中文标题】SQL:计算输出列上出现的次数并根据出现次数计算一些百分比【英文标题】:SQL : Count the number of occurrences occuring on output column and calculate some percentage based on the occurences 【发布时间】:2012-07-02 20:58:42 【问题描述】:

我的 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 出 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

【问题讨论】:

您已经尝试过哪些查询/查询? 嗨猎人:这是我的尝试:sqlfiddle.com/#!2/02a26/1 【参考方案1】:

我相信这是你需要的:

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

【讨论】:

感谢 Zane 发布 cmets。在您发布的代码中,解决方案是通过、失败、失败、失败、失败、通过。计算第一次成功率的逻辑是:如果代码在第一行遇到通过计数器为1,那么如果遇到失败则保持计数器1,失败后如果遇到通过仍然计数器应该为1,但是如果在前一个之后有通过通过然后计数器应该是2。在上面例如。成功率是第一次成功率是:1/6

以上是关于SQL:计算输出列上出现的次数并根据出现次数计算一些百分比的主要内容,如果未能解决你的问题,请参考以下文章

SQL:计算唯一出现的次数?

根据另一列计算一列的出现次数

SQL - 计算不同列上的重复次数

计算不同单词在列中出现的次数 Oracle 12c SQL

Oracle SQL:计算给定条目的属性出现的频率并选择出现次数最多的属性

连接 2 个表并计算 SQL 中特定字段的出现次数