mysqli - Sql : How to calculate table values using formula -
here original query :, generates o/p 2 columns name (label, count) :
label count fails 1 pass 3
and here query wrote generates above data
select r.pname resolution ,lb.label ,count(r.pname) occurences issuelink inner join jiraissue p on issuelink.source = p.id inner join jiraissue c on issuelink.destination = c.id inner join issuelinktype t on issuelink.linktype = t.id inner join resolution r on c.resolution = r.id inner join issuestatus istat on p.issuestatus = istat.sequence inner join label lb on c.id = lb.issue t.linkname = 'jira_subtask_link' , p.pkey in (@pkey) , c.issuetype in ('13') , r.pname not in ('fails smoke test - general failure', 'fails smoke test - new firmware available') , label in ('smoketest', 'fullcert', 'bfv', 'papercert') group r.pname;
as per suggestion tried using cross function, throwing error of "please check syntax":
select 100.0 * fail.cnt / (fail.cnt + pass.cnt) c ( select r.pname label , count(r.pname) cnt issuelink inner join jiraissue p on issuelink.source = p.id inner join jiraissue c on issuelink.destination = c.id inner join issuelinktype t on issuelink.linktype = t.id inner join resolution r on c.resolution = r.id inner join issuestatus istat on p.issuestatus = istat.sequence inner join label lb on c.id = lb.issue t.linkname = 'jira_subtask_link' , p.pkey in ('srpdtvtpv-3') , c.issuetype in ('13') , r.pname not in ('fails smoke test - general failure', 'fails smoke test - new firmware available') , label in ('smoketest', 'fullcert', 'bfv', 'papercert') group r.pname ) fail cross join ( select r.pname label , count(r.pname) cnt issuelink inner join jiraissue p on issuelink.source = p.id inner join jiraissue c on issuelink.destination = c.id inner join issuelinktype t on issuelink.linktype = t.id inner join resolution r on c.resolution = r.id inner join issuestatus istat on p.issuestatus = istat.sequence inner join label lb on c.id = lb.issue t.linkname = 'jira_subtask_link' , p.pkey in ('srpdtvtpv-3') , c.issuetype in ('13') , r.pname not in ('fails smoke test - general failure', 'fails smoke test - new firmware available') , label in ('smoketest', 'fullcert', 'bfv', 'papercert') group r.pname ) pass fail.label = 'fails certification' , pass.label = 'passes certification'
here's 1 way using cross join
:
select 100.0 * a.count / (a.count + b.count) c yourquery cross join yourquery b a.label = 'a' , b.label = 'b'
here's approach using aggregates, bit more tricky uses yourquery once:
select 100.0 * cnt_a / (cnt_a + cnt_b) c ( select max(case when label = 'a' count end) cnt_a , max(case when label = 'b' count end) cnt_b yourquery ) subqueryalias
Comments
Post a Comment