【问题标题】:SQL Average of total days in DATA per month每月 DATA 中总天数的 SQL 平均值
【发布时间】:2017-03-12 05:58:46
【问题描述】:

我有一个 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(当月数据中的总天数。)

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

【问题讨论】:

  • 什么平台? SQL 服务器?甲骨文?后格雷斯?您尚未指明哪个字段将指示日期,但这是一个开始:SUM(W1.INJECTION_VOLUME) / COUNT(DISTINCT MyDateField)。请注意,这 first 将总数相加,然后将它们相除,这通常是获得此类数字的正确方法
  • 其实这很完美。谢谢!
  • 酷。以后请记住,它自己的SQL标签没有多大意义-您还应该发布平台
  • 会的。它是“FINDER”数据库,是一个 Oracle 数据库。

标签: sql oracle date


【解决方案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)

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

【讨论】:

    【解决方案2】:

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

    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,因此您可能需要稍微更改代码以使其正常工作。

    【讨论】:

    • 谢谢,这听起来应该可以。由于某种原因,它说它缺少括号。我会弄乱它直到它起作用。再次感谢
    • SUM(W1.INJECTION_VOLUME) / COUNT(DISTINCT MyDateField) 这是我需要的代码。非常适合我正在尝试做的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    相关资源
    最近更新 更多