MySQL:在进一步计算中使用聚合结果

时间:2011-02-11 16:10:12

标签: mysql reporting aggregate olap

我正在撰写报告生成器。对于一份报告,我需要根据给定的特征(供应商,记录用户,语言等)进行细分,每行包括我感兴趣的特征名称,与该特征相匹配的项目数量,以及百分比这个数字代表的总项目数量。前两个不是问题,第三个是。

例如,要按语言进行细分,我会使用这样的查询。

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

这给了我每种语言的项目数。

我可以获得表中的项目总数,并将其存储在一个变量中,只需要一个普通的计数。

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

现在我要添加第三列,即lang_total中的数字除以@totalOpen中的值乘以100(换句话说,符合条件的所有项目的百分比)。以下内容:

这是我遇到的麻烦,因为据我所知,你不能在计算中使用聚合列。

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 个答案:

答案 0 :(得分: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;