【问题标题】:How to get average sum for every weekday? (MySQL)如何获得每个工作日的平均金额? (MySQL)
【发布时间】:2020-04-10 10:41:21
【问题描述】:

我正在为一项任务苦苦挣扎 - 我需要获得每个工作日的平均用户数。不幸的是,我被困在了这一点上。

SELECT dayname(DAY) as week, SUM(VISITORS_NUMBER) as vis
FROM mytable
GROUP BY week

上面代码的结果是这样的Sum results

从这一刻起,我想获得相同的工作日列,但具有平均值。

我能做什么?子查询我试过了,但我还是个初学者,不能正常使用

编辑 1: AVG() 不工作。我得到这样的结果:AVG() RESULTS

我检查了 excel,周五的平均值应该是 572,而不是 53。

这就是我的数据集的样子:Data set

编辑 2:

CREATE TABLE `mytable` (
 `DAY` date NOT NULL,
 `BROWSER` varchar(22) COLLATE utf8_unicode_ci DEFAULT NULL,
 `PLATFORM` varchar(13) COLLATE utf8_unicode_ci DEFAULT NULL,
 `VISITORS_NUMBER` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

INSERT INTO mytable(DAY, BROWSER, PLATFORM,VISITORS_NUMBER)
VALUES('2020-02-01','Android Webkit Browser','Android','9'),
       ('2020-02-01','Safari','iOs','5'),
       ('2020-02-01','Android Webkit Browser','Android','15');

【问题讨论】:

  • 提示:AVG(),而不是 SUM()
  • AVG() 不起作用,因为我一天的平均水平很奇怪。我将再发布 2 张图片来准确我的问题
  • 显示源数据(作为 CREATE TABLE + INSERT INTO 脚本)和该数据的期望结果。
  • @Veticus 。 . .您将需要展示一些示例数据和所需的结果。
  • @Veticus 能否请您也显示打印的工作日数?因为这里我们有没有的总和。的访客让我们说“星期五”。但是有多少个星期五?

标签: mysql sql average


【解决方案1】:

测试

SELECT DAYNAME(`day`) as `week`, SUM(visitors_number) / COUNT(DISTINCT `day`) as avg_vis
FROM mytable
GROUP BY `week`

【讨论】:

  • 谢谢,但不起作用 - 星期五用你的方法的平均值是 1208,而应该是 572
  • @Veticus 将数据集的照片替换为文本脚本(或创建小提琴)。 你的方法在星期五的平均值是 1208,而应该是 572 分别获取 SUM 和 COUNT,检查哪个值是错误的,看看为什么是错误的。
【解决方案2】:

您需要 2 个级别的聚合:

SELECT DAYNAME(t.day) AS day, AVG(t.visitors) AS vis
FROM (
  SELECT day, SUM(VISITORS_NUMBER) AS visitors
  FROM mytable
  GROUP BY day
) t
GROUP BY DAYNAME(t.day)

查看简化的demo

【讨论】:

  • 它仍然是错误的 - 我在星期五得到的结果是 1208 而不是 572 :c
  • 再次运行现在编辑的代码。您可以在演示中看到它的工作原理。
猜你喜欢
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-25
  • 2019-07-22
  • 2021-09-24
  • 2021-11-11
相关资源
最近更新 更多