我正在撰写报告生成器。对于一份报告,我需要根据给定的特征(供应商,记录用户,语言等)进行细分,每行包括我感兴趣的特征名称,与该特征相匹配的项目数量,以及百分比这个数字代表的总项目数量。前两个不是问题,第三个是。
例如,要按语言进行细分,我会使用这样的查询。
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中必须有这样做的方法,但我无法追踪它。任何人都可以帮忙解决这个问题吗?
答案 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;