0

I want to retrieve this kind of table in my sql:

    Type     Qad (type count)     Correct(No. of item without error)     Accuracy(%)
   type 1        3                                 3                            100
   type2         6                                 3                             50

I am curretly trying to use this query but it has an error:

SELECT `type` AS 'ReturnType', COUNT(*) AS 'QAd',
(SELECT COUNT(*) FROM bartran WHERE QASample='2' AND QAErrorID='1' AND `type`=ReturnType AND TimefileDate BETWEEN '2012-01-01' AND '2012-12-31' AS 'Correct', 
(SELECT COUNT(*) FROM bartran WHERE QASample='2' AND QAErrorID='1' AND `type`=ReturnType AND TimefileDate BETWEEN '2012-01-01' AND '2012-12-31') / COUNT(*) * 100) AS 'Accuracy' 
FROM bartran WHERE QASample='2'
AND TimefileDate BETWEEN '2012-01-01' AND '2012-12-31'
GROUP BY TYPE;

I'm current new to this one, hope someone helps me with this. thanks!!

jomsk1e
  • 3,585
  • 7
  • 34
  • 59

1 Answers1

3

You had the brackets ) missing in the query, correct is:

SELECT `type`  AS 'ReturnType', 
       Count(*)   AS 'QAd', 
       (SELECT Count(*) 
        FROM   bartran 
        WHERE  qasample = '2' 
               AND qaerrorid = '1' 
               AND `type` = returntype 
               AND timefiledate BETWEEN '2012-01-01' AND '2012-12-31') AS 
       'Correct', 
       (SELECT Count(*) 
        FROM   bartran 
        WHERE  qasample = '2' 
               AND qaerrorid = '1' 
               AND `type` = returntype 
               AND timefiledate BETWEEN '2012-01-01' AND '2012-12-31') / Count(* 
       ) * 100 AS 'Accuracy' 
FROM   bartran 
WHERE  qasample = '2' 
       AND timefiledate BETWEEN '2012-01-01' AND '2012-12-31' 
GROUP  BY type; 

Much better Query would be:

SELECT `type` AS 'ReturnType', 
       Count(*)  AS 'QAd', 
       Count(CASE 
               WHEN qaerrorid = '1' THEN 1 
               ELSE NULL 
             end)  AS 'Correct', 
       Count(CASE 
               WHEN qaerrorid = '1' THEN 1 
               ELSE NULL 
             end) / Count(*) * 100 AS 'Accuracy' 
FROM   bartran 
WHERE  qasample = '2' 
       AND timefiledate BETWEEN '2012-01-01' AND '2012-12-31' 
GROUP  BY type;
Ankur
  • 12,676
  • 7
  • 37
  • 67
  • i think this now solve my problem, but why does the execution takes a lot of time? 1 minute plus. :( – jomsk1e Jan 17 '13 at 10:22
  • @JRC Try the new Query that i have added – Ankur Jan 17 '13 at 10:25
  • @Ankur it a good point to use SUM instead Count `SUM(CASE WHEN qaerrorid = '1' THEN 1 ELSE 0 end)`. Also use `COUNT(1)`, not `COUNT(*)`. It will be a bit faster – Andrey Voloshin Jan 17 '13 at 10:34
  • @AndreyVoloshin count(1) and count(*) are same, see [this](http://stackoverflow.com/a/5180023/662250) and also I did not find anywhere if sum is better than count, so I would prefer count for code clarity point of view – Ankur Jan 17 '13 at 11:00