我试图在mysql中运行一个简单的百分比计算。这看起来很简单,但很明显这里有些不对劲。
Select state, job_type, count(*) cnt, (count(*)/(SELECT SUM(count(*)) FROM flow.job)) * 100 AS pct
From flow.job J
Where start_date >= '2018-12-14'
Group by state, job_type
错误代码:1111。组函数的使用无效
如果查询稍微复杂一些,因为我将两个表连接在一起,那会是什么样子?我在试这个。
select DR.state, count(*) cnt, (count(*)/(SELECT SUM(count(*)) FROM flow.run DR, flow.job J where DR.id = J.id)) * 100 AS pct
from flow.run DR, flow.job J
where DR.id = J.id
and DR.start_date > '2018-12-08'
group by DR.state
我也有同样的错误。。。
错误代码:1111。组函数的使用无效
3条答案
按热度按时间cgh8pdjw1#
正如其他人评论的那样,你不能这样做
SUM(COUNT(*))
在sql中。我假设您希望百分比是日期范围内每个组的计数与同一日期范围内所有组的总数之比。
我会在from子句中将total作为子查询来计算,因此它只执行一次子查询并重用其结果。
记住在子查询中使用相同的日期范围条件。查询不可能仅仅因为外部查询上存在一个条件就猜测您的意思是子查询中从同一日期范围计数的行。
mzsu5hc02#
你会使用
JOIN
使用计算给定作业的流总数的子查询。uplii1fm3#
通常,在查询中不应该使用多个聚合函数。
这些问题应该用视图来解决。
创建一个同时包含分子和分母的视图,然后只需对该视图执行算术运算。
而且,我不这么认为
SUM(COUNT(*))
是你真正想要的。请提供更多细节。