Mysql SQL:计算输出列上出现的次数,并根据出现的次数计算百分比
我的sql查询获取固件的bug fix验证列表,例如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数据:Mysql SQL:计算输出列上出现的次数,并根据出现的次数计算百分比,mysql,sql,Mysql,Sql,我的sql查询获取固件的bug fix验证列表,例如def-456是要求我在产品上测试固件测试的票据。def-456有几个正在记录结果的子任务。结果记录为:id:abc-123、abc-124、abc-125等(如下表所示)。这些对应的id具有“通过”或“失败”结果。我需要计算两个值--> 1.尝试次数:在下面的示例中,尝试次数为3/5,有3次通过和2次失败(即通过/通过+失败),在这里我可以使用count()方法,但不知道如何附加“/5”和 2.第一次尝试成功率:在下面的示例中,abc-123
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
我相信这就是你需要的:
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
我相信这就是您所需要的:
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
您已经尝试了哪些查询?嗨,亨特:这是我的尝试:您已经尝试了哪些查询?嗨,亨特:这是我的尝试:感谢赞恩发表评论。在您发布的代码中,解析为pass,fail,fail,fail,fail,pass。计算第一次成功率的逻辑是:若代码在第一行遇到pass,则计数器为1,若遇到fail,则计数器为1;若遇到pass,则计数器为1;若遇到fail,则计数器为1;若遇到pass,则计数器为2。在上面的例子中,成功率是第一次成功率是:1/6感谢赞恩发表评论。在您发布的代码中,解析为pass,fail,fail,fail,fail,pass。计算第一次成功率的逻辑是:若代码在第一行遇到pass,则计数器为1,若遇到fail,则计数器为1;若遇到pass,则计数器为1;若遇到fail,则计数器为1;若遇到pass,则计数器为2。在上面的例子中,成功率是第一次成功率是:1/6