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)

MYSQL单表查询

Mongoose: aggregate聚合 $group使用说明

MYSQL查询--聚合函数查询

MySQL平均二级聚合