使用sql中另一个表的count函数从一个表中选择列

时间:2013-07-12 07:04:59

标签: mysql

run_software

runID   Release
1   X
2   X
3   Y
4   Z
5   Y
6   X
7   Y
8   Z
9   X
10  Z

testcase        

testID  runID   Result
T_1          1  PASS
T_2          1  FAIL
T_3          1  PASS
T_4          2  PASS
T_5          2  FAIL
T_6          3  PASS
T_7          4  FAIL
T_8          3  PASS
T_9          3  FAIL
T_10         5  PASS
T_11         5  FAIL
T_12         3  PASS

1)从run_software表我们可以理解在runID 1, 2,6,9上运行的X软件

2)获取runID - 1并进入testcase表。 这里我们有7个带有runID 1的testID。 从这7个testID我们需要使用group by Result和runID来测量TC计数和PASS / FAIL的百分比。

AIM:最终目标是通过考虑最大测试用例数来找到最新的3版本及其带有PASS百分比的runID。

EG。如果在每个10,12,9,21个测试用例的runID的1,2,3,4上执行'X'发布,我们应该考虑使用runID 4发布'X'以测量'PASS%'

Desired OutPut:

considering PASS% is > 60
Release runID   Result  PASS %
X   1   PASS    66.66
Y   3   PASS    75
Z   4   FAIL    0

理解

Release 'X' has runID's - 1, 2 , 6, 9 with 3, 2, 0 , 0 TestID's respecively
    Hence, X finalized runID '1' with 66.66 as PASS% (2 PASS & 1 FAIL)

1 个答案:

答案 0 :(得分:0)

你的问题实际上并不是很清楚,但它应该是我想的那样:

SELECT r.Release, r.runID, (CASE WHEN subq.PassPerc >= 60 THEN 'PASS' ELSE 'FAIL' END) AS Result, subq.PASSPerc 
    FROM run_software AS r 
        INNER JOIN (SELECT p.runID, (100 * p.passed / t.total) AS PASSPerc 
            FROM (SELECT runID, COUNT(*) AS passed FROM testcase WHERE Result = 'PASS' GROUP BY runID) AS p
            INNER JOIN (SELECT runID, COUNT(*) AS total FROM testcase GROUP BY runID) AS t ON t.runID = p.runID 
            GROUP BY p.runID, p.passed, t.total) AS subq
        ON subq.runID = r.runID 
    GROUP BY r.Release, r.runID, subq.PASSPerc