我目前正在编写报告生成器。对于一份报告,我需要按给定特征(供应商、登录用户、语言等)进行分割,其中每一行包括我感兴趣的特征的名称、与该特征匹配的项目数量以及百分比该数字代表的总项目数。前两个不是问题,第三个是。
例如,要按语言进行分割,我将使用这样的查询。
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 中一定有一种方法可以做到这一点,但我一直无法找到它。谁能帮忙解决一下吗?
最佳答案
我现在第一次读到这个问题。我知道可能已经太晚了,对你没有用,但我会用这种方式解决。
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;
关于MySQL:使用聚合结果进一步计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4971312/