我试图建立一个查询来查找某一天每个广播时段播放的平均音乐曲目数。
根据日期时间值(已创建的字段),我有一个记录播放曲目的表格。
所以我需要计算每小时记录的条目数或轨道数。
然后按小时总计,找到平均值。
到目前为止,我有这个,但想知道它是否正确?
SELECT AVG(a.total) FROM (
SELECT HOUR(created) AS hour, COUNT(id) AS total
FROM `music_log` r
WHERE DATE(created) = DATE( DATE_SUB(NOW() , INTERVAL 1 DAY) ) group by HOUR(r.created)
) a
我得承认,我从stackoverflow上的另一篇文章中提出了这个问题,并且不了解 a 和 r 的意思/参考。
我想知道我是否有这个权利,所以我可以扩展查询以涵盖四分之一(3个月)的结果。
答案 0 :(得分:1)
您可以在没有子查询的情况下计算平均值:
SELECT COUNT(*) / COUNT(DISTINCT DATE(created), HOUR(created) ) as average
FROM `music_log`
WHERE QUARTER(created) = 1 AND YEAR(created) = YEAR(NOW()) ;
这计算总计数和小时数,而不需要子查询。
答案 1 :(得分:0)
正如Strawberry所说,看起来我正走在正确的轨道上。谢谢草莓。
为了扩展这一点,以防万一它可以帮助其他任何人,我已经将查询包括在一个季度,在这种情况下是当年的第一季度....他说希望那里有'我的查询没有其他问题:)
SELECT AVG(a.total) FROM (
SELECT DATE(created) as day, HOUR(created) AS hour, COUNT(id) AS total
FROM `music_log`
WHERE QUARTER(created) = 1
AND YEAR(created) = YEAR(NOW())
group by DATE(created), HOUR(created)
) a
为了正确计算,我需要按小时和小时对小时结果进行分组。
在问题的上一个查询中,它仅按小时分组。如果平均值计算仅在一天内完成,那么这很好,但是当您将其展开超过一天时,结果将变得不正确。这是因为它会添加两次出现的总时间,例如,然后算出平均值。
希望有所帮助......或者如果我犯了错误,我希望有人接受它;)