2011-02-11 67 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;