MySQL AVG(COUNT(*) - 订单按星期查询?

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)

chr*_*035 9

要获得平均值,您不需要每天的总计,您需要每天多个每日总计.

  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)获得多少订单.然后将这些总数按星期几计算.


vic*_*tcu 0

你问的对我来说没有意义...... 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)对第一次聚合的结果进行操作来进行第二轮聚合。