首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每月数据总日数的SQL平均数

问每月数据总日数的SQL平均数
EN

Stack Overflow用户
提问于 2017-03-12 05:58:46
回答 2查看 701关注 0票数 0

我有一个SQL问题。我想找出每个月的平均注射量。目前,我的代码获取所有注入天数的总和,并将它们除以月份的总天数。

代码语言:javascript
复制
Sum(W1."INJECTION_VOLUME" /
EXTRACT(DAY FROM LAST_DAY(W1."INJECTION_DATE"))) AS "AVGINJ"

这不是我想要的。我需要取injection_volume,除以数据中的总天数。

即。现在的数据只有8天的injection volume,让我们说是3000天。

所以现在sql是3000/31。

我需要它是3000/8 (当前月份data中的总天数)。

而且,这应该只适用于本月。所有其他已完成的月份应除以该月份的总天数。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-12 22:51:35

使用

代码语言:javascript
复制
SELECT
SUM(W1.INJECTION_VOLUME) / COUNT(DISTINCT MyDateField)
FROM MyTable
WHERE X=Value

这给了你你想要的

代码语言:javascript
复制
SUM(W1.INJECTION_VOLUME) is the total volume for the dataset

给出您的天数,无论您有多少记录。

代码语言:javascript
复制
COUNT(DISTINCT MyDateField)

因此,如果您有100条记录,但在这段时间中只有5天的时间是唯一的,那么这个表达式将给出5条。

请注意,这类calc通常是通过

代码语言:javascript
复制
SUM(A) / SUM(B)

不

代码语言:javascript
复制
SUM(A/B)

他们给了你完全不同的答案。

票数 1
EN

Stack Overflow用户

发布于 2017-03-12 06:15:47

为了获得当前月份的平均数据,您需要在月份中将数据除以计数:

代码语言:javascript
复制
SUM(`W1`.`INJECTION_VOLUME` / COUNT(EXTRACT(YEAR_MONTH FROM `W1`.`INJECTION_DATE`)))

要将所有其他数据作为整个月的数据,您需要组合您的代码:

代码语言:javascript
复制
SUM(`W1`.`INJECTION_VOLUME` / EXTRACT(DAY FROM LAST_DAY(`W1`.`INJECTION_DATE`)))

用IF。所以就像这样:

代码语言:javascript
复制
SUM(
    IF(
        EXTRACT(YEAR_MONTH FROM `W1`.`INJECTION_DATE`) = EXTRACT(YEAR_MONTH FROM NOW()), 
        `W1`.`INJECTION_VOLUME` / COUNT(EXTRACT(YEAR_MONTH FROM `W1`.`INJECTION_DATE`)), 
        `W1`.`INJECTION_VOLUME` / EXTRACT(DAY FROM LAST_DAY(`W1`.`INJECTION_DATE`)
    )
)

注意:这是未经测试的,我不确定您正在使用的RDBMS,因此您可能需要稍微修改代码才能工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42744289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档