Edy*_*Edy 5 php mysql average count
这个问题令我困惑......我已经搜索了一天的网络工作,我尝试过很多东西.
我希望从我的数据库获得每周每天的平均订单数量.我可以用COUNT来计算总数#就好了.但我无法弄清楚如何在GROUP BY上获得COUNT的AVG.我已经尝试了子查询......功能......一切......没有用......也许有人可以给我一个骨头.
这是我在下面开始的查询.我知道AVG(COUNT(*))不起作用,但我会留下它,因为它显示了我想做的事情.
SELECT
AVG(COUNT(*)) AS avgorders,
SUM(total) AS ordertotal,
DAYNAME(STR_TO_DATE(order_time,'%m/%d/%Y %H:%i')) AS day
FROM data
GROUP BY day
ORDER BY DAYOFWEEK(STR_TO_DATE(order_time,'%m/%d/%Y %H:%i')) ASC
Run Code Online (Sandbox Code Playgroud)
要获得平均值,您不需要每天的总计,您需要每天多个每日总计.
Day | Count
__________________
Monday 5
Tuesday 4
Monday 6
Tuesday 3
... ...
Run Code Online (Sandbox Code Playgroud)
然后你可以平均这些数字.即星期一(5 + 6)/ 2.
这样的事情应该有效:
SELECT day_of_week, AVG(order_count) average_order FROM
(
SELECT DAYNAME(order_date) day_of_week,
DAYOFWEEK(order_date) day_num,
TO_DAYS(order_date) date,
count(*) order_count
FROM data
GROUP BY date
) temp
GROUP BY day_of_week
ORDER BY day_num
Run Code Online (Sandbox Code Playgroud)
更新:我本来是错的.将内部SELECT按实际日期分组以获得正确的每日总计.例如,您需要分别在星期一(2/1/10)和星期一(2/8/10)获得多少订单.然后将这些总数按星期几计算.
你问的对我来说没有意义...... AVG 是一个聚合函数,COUNT 也是一个。上面的查询有什么问题,但只使用:COUNT(*) AS avgorders?
假设您第 1 天有 3 行,第 2 天有 2 行,第 3 天有 5 行,第 4 天有 9 行……您是否想要返回一个单行结果来告诉您:
avgorders = (3 + 2 + 2 + 5 + 9) / 5 = 21 / 5 = 4.2
ordertotal = (3 + 2 + 2 + 5 + 9) = 21
Run Code Online (Sandbox Code Playgroud)
我认为您无法在单个查询中获得该结果,并且最好使用服务器端语言(例如 PHP)对第一次聚合的结果进行操作来进行第二轮聚合。