2011-02-11 36 views
0

我目前正在編寫報告生成器。對於一份報告,我需要根據給定的特徵(供應商,登錄用戶,語言等)進行分類,每行包括我感興趣的特徵的名稱,匹配該特徵的項目的數量以及百分比這個數字代表總的項目,前兩個都沒有問題,第三是。MySQL:在進一步計算中使用聚合結果

例如,獲得由我會使用這樣的查詢語言的崩潰。

SELECT lang_id, 
COUNT(IF(open=TRUE,1,NULL)) AS lang_total 
FROM table 
GROUP BY lang_id; 

這給我每種語言的項目數

我可以得到表中的項目總數並將其存儲在變量sim用普通的計數就足夠了。

SELECT @totalOpen:=COUNT(*) FROM table WHERE open = TRUE; 

現在我想添加第三列,這是數字在lang_total乘以100 @totalOpen值除以(換句話說,即符合條件的所有項目的百分比)。一些沿着以下幾點:

這是我有麻煩的一點,因爲據我可以告訴你不能在計算中使用聚合列。

SELECT lang_id, 
COUNT(IF(open=true,1,NULL)) AS lang_total 
(lang_total/@totalOpen)*100 as lang_percent 
FROM table 
GROUP BY lang_id; 

我敢肯定,在MySQL中必須有這樣做的方法,但我一直無法跟蹤它。任何人都可以幫忙嗎?

回答

1

我現在第一次閱讀這個問題。我知道,對你有用可能已經太晚了,但我會以這種方式解決問題。

select lang_id, 
sum(if(open= true,1,0)) as lang_total, 
coalesce(sum(if(open= true,1,null))/@r,0) as percentage 
from table,(select @r:=count(*) from table where open = TRUE) as t 
group by lang_id;