【问题标题】:Calculate AVG base on dayweek SQL根据日周 SQL 计算 AVERAGE
【发布时间】:2021-05-30 12:47:14
【问题描述】:

我正在使用 MariaDB 数据库。
我需要知道,每天在某个时间的平均计数。
我试过这样的想法。

SELECT AVG(dayShipments), weekdays
    FROM (SELECT COUNT(idShipment) as "dayShipments", WEEKDAY(dateShipments) as "weekdays"
            FROM weekdays
            WHERE dateShipments BETWEEN '2021-05-01'AND '2021-05-21'
            GROUP BY dateShipments) as t1
     GROUP BY weekdays

我的老板告诉我,这个查询忽略了我没有任何货件的那一天。
我怎么能包括那个?
对不起我的英语不好,谢谢你帮助我

【问题讨论】:

  • 你的语句和你的查询做不同的事情。而且,你想在没有发货的日子里做什么?

标签: mysql sql mariadb


【解决方案1】:

如果您想按星期几进行汇总(这就是您的查询似乎正在做的事情。并且您想将没有发货的日子视为0,然后使用SUM() 和除法:

SELECT WEEKDAY(dateShipments) as weekday,
       COUNT(*) / 3 as dayShipments as avg_per_day
FROM weekdays
WHERE dateShipments BETWEEN '2021-05-01'AND '2021-05-21'
GROUP BY weekday;

3 是因为查询跨越三周。

【讨论】:

  • 这个脚本和我的有同样的问题。结果集应该类似于 {"Monday": 1.5, "Tuesday": 4.1, ... }。但是,如果星期一我没有任何 Shipment(所以计数为“0”),则使用您的脚本(以及我的脚本),AVG() 函数不计算“0”值。
  • @FrancescoDellaMaggiora。 . .如果缺少工作日,则将其计为缺少。如果特定工作日根本没有行,则它不会出现在结果集中。
【解决方案2】:

首先不要担心你的英语。已经足够了。

其次,你的老板是对的。如果您在“weekdays”表中没有特定日期的记录,则提及的日期将永远不会显示在此查询中。 为了解决问题,我认为您需要有一个临时表用于一周中的某一天,并与您的 t1 表保持连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    相关资源
    最近更新 更多