2012-12-16 100 views
0

個我想計算的三個不同的等級A,B百分比,CMySQL查詢,計算出三個檔次

1 product have A grade 
5 products have B grade 
3 products gave C grade 

SQL - 該查詢返回3行

SELECT count(*) FROM table1 WHERE pid = '480' AND grade IN 
    (SELECT DISTINCT grade FROM table1) 
    GROUP BY grade 

    ------------------------ 
    CCA_ST2  count(*) 
    ------------------------ 
    A   1 
    B   5 
    C   3 
------------------------ 

如何計算百分比?

( SELECT count(*) FROM table1 WHERE pid = '480' AND grade IN 
     (SELECT DISTINCT grade FROM table1) 
     GROUP BY grade 
    ) 
    DIVIDE BY 
    (SELECT COUNT(*) FROM table1 WHERE pid = '480') * 100 

我試圖與此查詢

SELECT grade, 
(SELECT count(*) FROM table1 WHERE pid = '480' AND grade IN 
    (SELECT DISTINCT grade FROM table1) 
    GROUP BY grade 
) 
/
(SELECT count(*) FROM table1 WHERE pid = '480') 
* 100 
AS score 
FROM table1 GROUP BY grade 

我得到這個錯誤。我怎麼能解決這個問題

subquery returns more than one row 

我真的不想爲此創建過程,我知道這可以通過查詢來完成。但我今天感覺很懶惰。

回答

4

你不能把所有的組數和由總計數劃分他們,你必須除以總計數每個計數:

SELECT 
    grade, 
    100 * count(*)/(SELECT count(*) FROM table1 WHERE pid = '480') AS score 
FROM table1 
WHERE pid = '480' 
GROUP BY grade 
ORDER BY grade