【发布时间】:2020-11-16 15:07:59
【问题描述】:
我需要计算字段的Average 值,但需要做两件事:
1- 不应将空值计入平均数学。
2- 如果该字段为空,它仍然必须显示在结果中(平均 === 0)
想象一下我有这个数据集:
-----------------------
Code | valField | Date
-----------------------
A | | 2020-09-08
B | 12 | 2020-09-09
A | 10 | 2020-09-08
B | 15 | 2020-09-09
B | | 2020-09-09
C | | 2020-09-09
所以我需要day 的平均值。如您所见,我们有:
A = { 空, 10 }
B = { 12, 15, 空 }
C = { 空 }
我需要这样平均:
A 的平均值 = 10
B 的平均值 = (12+15)/2(因为我们有 2 个非空值)
C = 0 的平均值(它没有单个值,但我需要它在结果上显示为 0)
到目前为止,我可以同时满足这两个要求。
此查询将显示空值,但也会计算 average math 上的空字段
SELECT AVG(valField) FROM myTable;
所以 B 的平均值 = (12+15+0)/3 - 错误!
现在这将忽略空值,AVG 数学将是正确的,但不会显示 C。
SELECT AVG(valFIeld) FROM myTable WHERE valField <> ''
我怎样才能满足这两个要求?
【问题讨论】:
-
valField有哪些数据类型?请提供您的表结构。 -
嗨! @SlavaRozhnev
valField可以是integer或empty(非空)。
标签: mysql sql average aggregate-functions sql-null