MySQL:在进一步计算中使用聚合结果
Posted
技术标签:
【中文标题】MySQL:在进一步计算中使用聚合结果【英文标题】:MySQL: Use aggregate result in further calculation 【发布时间】:2011-02-11 16:10:11 【问题描述】:我目前正在编写报告生成器。对于一份报告,我需要按给定特征(供应商、登录用户、语言等)进行细分,每一行都包括我感兴趣的特征的名称、与该特征匹配的项目数量以及百分比这个数字代表的项目总数。前两个不是问题,第三个是。
例如,要按语言分类,我会使用这样的查询。
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】:我现在第一次读到这个问题。我知道对你有用可能为时已晚,但我会以这种方式解决。
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:在进一步计算中使用聚合结果的主要内容,如果未能解决你的问题,请参考以下文章
求助:卡西欧fx5800怎样编坐标正算中桩边桩计算公式、坐标反算计算公式、圆曲线中桩边桩计算公式?
26《MySQL 教程》聚合函数(聚合函数 MIN、MAX)