sql在mysql中的简单百分比计算

rhfm7lfc  于 2021-06-15  发布在  Mysql
关注(0)|答案(3)|浏览(444)

我试图在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。组函数的使用无效

cgh8pdjw

cgh8pdjw1#

正如其他人评论的那样,你不能这样做 SUM(COUNT(*)) 在sql中。
我假设您希望百分比是日期范围内每个组的计数与同一日期范围内所有组的总数之比。
我会在from子句中将total作为子查询来计算,因此它只执行一次子查询并重用其结果。

SELECT DR.state, COUNT(*) AS count, COUNT(*) / total.count AS pct
FROM flow.run AS DR
JOIN flow.job AS J ON DR.id = J.id
CROSS JOIN (
  SELECT COUNT(*) AS count 
  FROM flow.run AS DR
  JOIN flow.job AS J ON DR.id = J.id
  WHERE DR.start_date > '2018-12-08'
) AS total
WHERE DR.start_date > '2018-12-08'
GROUP BY DR.state

记住在子查询中使用相同的日期范围条件。查询不可能仅仅因为外部查询上存在一个条件就猜测您的意思是子查询中从同一日期范围计数的行。

mzsu5hc0

mzsu5hc02#

你会使用 JOIN 使用计算给定作业的流总数的子查询。

SELECT J.state, J.job_type, COUNT(*) cnt, COUNT(*)/SUM(total.cnt) * 100 AS pct
FROM
    flow.job J
    JOIN (select job_id, COUNT(*) AS cnt FROM flow.job) total ON total.id = J.id
WHERE J.start_date >= '2018-12-14'
GROUP BY J.state, J.job_type
uplii1fm

uplii1fm3#

通常,在查询中不应该使用多个聚合函数。
这些问题应该用视图来解决。
创建一个同时包含分子和分母的视图,然后只需对该视图执行算术运算。
而且,我不这么认为 SUM(COUNT(*)) 是你真正想要的。请提供更多细节。

相关问题