首页 > 解决方案 > 在 mysql 中的 GROUP BY 的单个查询中获取 AVG

问题描述

在我正在处理的一些查询中,我需要帮助。

所以我有这个查询。

SELECT EventCode, COUNT(SchedStatus) as 'SchedStatus' 
                        
FROM itemschedule WHERE SchedStatus = 26 AND ActualTime <= SchedDateTime 
                        
GROUP BY EventCode ORDER BY COUNT(SchedStatus)

结果是

EventCode   SchedStatus
Station1      3
Station2      1
Station3      1

然后我有这个查询

SELECT EventCode, COUNT(SchedStatus) as 'SchedStatus', COUNT(SchedStatus) / (SELECT COUNT(*) 

FROM itemschedule WHERE EventCode = "Station1") as 'Percentage'

FROM itemschedule WHERE SchedStatus = 26 AND ActualTime <= SchedDateTime AND EventCode = "Station1"

结果是

EventCode  SchedStatus Percentage
Station1     3         0.0492

如您所见,我试图根据他们的“Schedstatus”有多少来获得每个“EventCode”的平均值,并将其除以“SchedStatus”的总数。

所以我想要的结果是这样的。

EventCode   SchedStatus  Percentage
Station1      3           0.0492
Station2      1           "Average Here"
Station3      1           "Average Here"

但是由于需要特定 EventCode 值的 where 子句,我无法使其工作。有没有办法根据单个查询中的“EventCode”值获取所有平均值?

感谢所有可以提供帮助的人。

标签: mysql

解决方案


我找到了我的解决方案。

希望这将帮助与我的情况相同的人。

SELECT d1.EventCode, COUNT(d1.SchedStatus) as 'SchedStatus', 

COUNT(d1.SchedStatus) / (SELECT COUNT(d2.SchedStatus) from itemschedule d2 WHERE d2.EventCode = d1.EventCode) as "Percentage"

FROM itemschedule d1 WHERE d1.SchedStatus = 26 AND d1.ActualTime <= d1.SchedDateTime

GROUP BY d1.EventCode ORDER BY COUNT(d1.SchedStatus) DESC
                        

如你看到的。我在要查询的表中放置了一个别名,在子查询中放置了另一个别名,以获取具有相同 EventCode 的数据行。

COUNT(d1.SchedStatus) / (SELECT COUNT(d2.SchedStatus) from itemschedule d2 WHERE d2.EventCode = d1.EventCode) as "Percentage"

推荐阅读