SQL每月DATA的总天数平均值

时间:2017-03-12 05:58:47

标签: sql oracle date

我有一个SQL问题。 我试图找到每月的平均注射量。目前我的代码占用了注入的所有天数的总和,并将它们除以当月的总天数

Sum(W1."INJECTION_VOLUME" /
EXTRACT(DAY FROM LAST_DAY(W1."INJECTION_DATE"))) AS "AVGINJ"

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

即。现在数据仅为injection volume的8天,假设它是3000。

所以现在sql是3000/31。

我需要将它设为3000/8(本月的数据中的总天数。)

此外,这应该仅适用于当月。所有其他已完成的月份应除以该月的总天数。

2 个答案:

答案 0 :(得分:1)

为了获得当月的数据平均值,您需要除以当月的计数:

SUM(`W1`.`INJECTION_VOLUME` / COUNT(EXTRACT(YEAR_MONTH FROM `W1`.`INJECTION_DATE`)))

要获取完整月份的所有其他数据,您需要合并代码:

SUM(`W1`.`INJECTION_VOLUME` / EXTRACT(DAY FROM LAST_DAY(`W1`.`INJECTION_DATE`)))

IF。所以像这样:

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 :(得分:1)

使用

SELECT
SUM(W1.INJECTION_VOLUME) / COUNT(DISTINCT MyDateField)
FROM MyTable
WHERE X=Value

这可以为您提供所需的内容

SUM(W1.INJECTION_VOLUME) is the total volume for the dataset

无论您有多少记录

,都会给您一些天数
COUNT(DISTINCT MyDateField)

因此,如果您有100条记录,但此时只有5个实际唯一天数,则此表达式为您提供5

请注意,这种计算通常用

解决
SUM(A) / SUM(B)

SUM(A/B)

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