【发布时间】:2020-07-22 04:00:02
【问题描述】:
我正在尝试查找如何计算适用于涉及“NA”值的公式的新 SQL 列。我认为由于“NA”值或由于我的分组,我没有得到我想要的结果。请看下表和公式:
我的表如下:
website session score
google 1 1
google 2 NA
bbc 3 2
bbc 4 4
bbc 5 5
我用来创建新计算字段的公式如下:
select
website,
(sum(score IN (4,5))/sum((score is not null)) - sum(score IN (1,2))/sum(score is not null))*100 as new_column
from
my_table
group by
website
本质上该公式正在尝试执行以下操作:
将分数列中 4 或 5 的值相加,然后将它们除以分数列中确实存在的数字的总和。
然后扣除以下内容:
将分数列中 1 或 2 的值相加,然后将它们除以分数列中确实存在的数字的总和。
最后:
将整个输出乘以 100
公式必须应用于每个组。
所以你应该有以下期望的结果:
只取第一组“google”
您有 4 个非空值。您有 2 个值,其中值为 IN (1,2),0 值为 (4,5)。
所以你会得到以下公式:
((0/4)-(2/4))*100
-2/4 * 100
= -50
但是,在 SQL 中计算时,我收到的值是 -100。这对我来说没有意义。谁能帮忙?
【问题讨论】:
-
您可以“选择”每个操作来检查错误在哪里,但我敢打赌,问题是您按网站分组,而 google 只有 2 行,而不是 4 行,其中之一所选行为空,因此不计算在内...
-
这个查询对我来说很好。顺便说一句:我想这是 MySQL 还是 MariaDB?然后请添加该标签。 SQL 问题应始终使用您正在使用的 DBMS 进行标记。
-
SQLITE 并添加了标签
-
@AntonioVenerosoContreras 我如何计算空行?
-
@BeansOnToast 在您的示例中,您声明有 2 个值,其中“google”的值为 IN(1,2)。但是,在您的表上,只有 1 条记录的分值为 IN(1,2)。对于 google,第二条记录是 NA 或 null。