0

私のSQLクエリは、ファームウェアのバグ修正検証のリストをフェッチします。たとえば、def-456は、製品のファームウェアテストをテストするように要求するチケットです。def-456には、結果が記録されるいくつかのサブタスクがあります。結果は:id:abc-123、abc-124、abc-125などとして記録されます(以下の表を参照)。これらの対応するIDには、「合格」または「不合格」の結果があります。2つの値を計算する必要があります---->1.試行回数:次の例では、試行回数は3/5になり、3回の合格と2回の不合格(つまり、合格/合格+不合格)があります。ここでは、カウントを使用できます。 ()メソッドは、「/ 5」と2を追加する方法を知りません。最初の試行の成功率:次の例では、abc-123は失敗しましたが、abc-124は合格し、abc-125は失敗しましたが、abc-126は合格し、abc-127失敗することなく合格したということは、私の成功率が3分の1(つまり、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
4

1 に答える 1

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リンク

于 2012-07-02T23:17:54.573 に答える