我有一个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(本月的数据中的总天数。)
此外,这应该仅适用于当月。所有其他已完成的月份应除以该月的总天数。
答案 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)
他们给你完全不同的答案。