我有一个SQL问题。我想找出每个月的平均注射量。目前,我的代码获取所有注入天数的总和,并将它们除以月份的总天数。
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中的总天数)。
而且,这应该只适用于本月。所有其他已完成的月份应除以该月份的总天数。
发布于 2017-03-12 22:51:35
使用
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条。
请注意,这类calc通常是通过
SUM(A) / SUM(B)不
SUM(A/B)他们给了你完全不同的答案。
发布于 2017-03-12 06:15:47
为了获得当前月份的平均数据,您需要在月份中将数据除以计数:
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,因此您可能需要稍微修改代码才能工作。
https://stackoverflow.com/questions/42744289
复制相似问题