我在使用 SQLite3 处理统计问题时遇到了意外的差异。我有一个来自 CSV 文件的数据集,其中包含季节性能源效率比 (SEER)。我的目标是找到大于或等于 21 的值出现的次数。
这是我的 .csv 文件中的数据:
先知 |
---|
24 |
40 |
26 |
32 |
13 |
26 |
26 |
28 |
29 |
17 |
25 |
10 |
23 |
22 |
13 |
31 |
31 |
36 |
25 |
27 |
35 |
34 |
17 |
39 |
18 |
21 |
23 |
22 |
26 |
31 |
26 |
25 |
22 |
21 |
34 |
26 |
29 |
24 |
27 |
27 |
24 |
30 |
38 |
31 |
32 |
9 |
26 |
19 |
24 |
29 |
28 |
26 |
19 |
29 |
39 |
26 |
30 |
32 |
28 |
30 |
22 |
25 |
27 |
29 |
24 |
30 |
29 |
20 |
30 |
25 |
26 |
29 |
27 |
25 |
20 |
18 |
15 |
25 |
23 |
27 |
23 |
27 |
24 |
28 |
27 |
40 |
27 |
12 |
30 |
24 |
34 |
33 |
29 |
22 |
40 |
32 |
27 |
35 |
23 |
39 |
我尝试使用 SQLite3 和以下查询来解决这个问题:
sqlite3 heat_data.db
.mode csv
.import ex02-115heat.csv heat
.schema
SELECT COUNT(*) FROM heat WHERE SEER >= 21;
最后一个查询返回 87。为了验证这个结果是否正确(并且由于我对 SQL 非常缺乏经验),我使用了 Excel 的“COUNTIF”函数,期望它也返回 87。令人惊讶的是,Excel 返回了 86。我怀疑其中的差异,手动统计了出现次数,果然发现了 86。
然后我咨询了 ChatGPT,它也确认了计数为 86。
我对这种不一致感到困惑。我的 SQL 查询是否存在任何问题,或者对于这种差异是否有其他解释?
在我的脑海中,如果
SEER
列中的数据是带有小数部分的数字,那么它可以解释你的观察结果。 例如,SEER
值21.00001
可能在选择查询中呈现为21
,但在比较中被视为匹配SEER > 21
。