在MySQL中计算每天平均销售额

3

在我的数据库中,有一张包含两列的表格。第一列包含日期,第二列是计数变量。我想知道是否可以根据日期和计数来计算每个工作日的平均计数。

以下是一个小例子:

表格:

Date         Count
02/01/2005     100
02/02/2005     200
02/03/2005     300
...            ...

输出:

 Days       Average
 Monday       120.5         
 Tuesday      200.2                   
 Wednesday    300.5 

首先,您需要按DAYNAME分组,然后尝试使用MAXGROUP BY将行转换为列。您可以将其作为两个不同的步骤进行搜索。 - RP-
2个回答

2
你可以在case表达式上进行一系列的avg调用,提取日期名称。
SELECT AVG(CASE DAYOFWEEK(`date`) WHEN 2 THEN `count` ELSE NULL END) AS Monday,
       AVG(CASE DAYOFWEEK(`date`) WHEN 3 THEN `count` ELSE NULL END) AS Tuesday,
       AVG(CASE DAYOFWEEK(`date`) WHEN 4 THEN `count` ELSE NULL END) AS Wednesday,
       AVG(CASE DAYOFWEEK(`date`) WHEN 5 THEN `count` ELSE NULL END) AS Thursday,
       AVG(CASE DAYOFWEEK(`date`) WHEN 6 THEN `count` ELSE NULL END) AS Friday
FROM   mytable

编辑:
鉴于在编辑后的帖子中更新了预期输出,现在更容易做到 - 只需按dayname分组:

SELECT   DAYNAME(`date`), AVG(`count`)
FROM     mytable
WHERE    DAYOFWEEK(`date`) BETWEEN 2 AND 6
GROUP BY DAYNAME(`date`)

嗨,那给了我语法错误。很抱歉,我刚刚意识到我需要以不同的方式输出...我编辑了我的问题。我尝试使用Select Dayofweek(Date), AVG(Count) from table Group by Dayofweek(Date)来做一些事情。然而它没有给我正确的答案。感谢您的回复! - Peanut
@Peanut,是的,我忘记了那里的 end,然后只是复制粘贴了错误五次,非常抱歉。鉴于您对问题的最新更新,现在更容易实现了-请参阅我的编辑答案以获取详细信息。 - Mureinik

0

@Mureinik的答案也可以使数据集中心旋转。如果您需要将星期几作为行而不是列(根据您的问题,我不确定),则查询会变得更简单(未经测试):

SELECT DAYNAME(`date`) AS day_of_week,
       AVG(`count`) AS average
FROM yourtable
GROUP BY DAYOFWEEK(`date`)
ORDER BY DAYOFWEEK(`date`)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接