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

Popular posts from this blog

c# - SVN Error : "svnadmin: E205000: Too many arguments" -

c# - Copy ObservableCollection to another ObservableCollection -

All overlapping substrings matching a java regex -