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

标签 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 中一定有一种方法可以做到这一点,但我一直无法找到它。谁能帮忙解决一下吗?

最佳答案

我现在第一次读到这个问题。我知道可能已经太晚了,对你没有用,但我会用这种方式解决。

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/

相关文章:

php - 从 MySQL 数据库检索时间戳值返回当前日期

delphi - Win32 : Reporting technology that doesn't have to be installed or shipped

node.js - Mongodb Node.js $lookup 带日期和 $match

r - 基于无序的列对聚合数据框

Java + MySQL - 语法错误但语句正确

php - 当使用Javascript数据更改时将数据存储回mysql

service - 用于格式化两位小数的 SSRS 表达式不显示零

amazon-web-services - 每 15 分钟运行一次 Athena 与 Kinesis Data Analytics

postgresql - 合并来自多行的 hstore 数据

python - PyQt4 QTableWidget - 过滤和修改 mySQL 数据库中的数据