简短回答
当一个条件依赖的数值缺失时,这个条件的结果是 UNKNOWN。若其他已知条件已经决定结果,组合规则仍可以是 TRUE 或 FALSE,下表会展示这种情况。把 UNKNOWN 直接替换为 TRUE 或 FALSE,可能改变哪些证券通过或不通过。保留 UNKNOWN,能让你明确决定如何处理缺失数据。
需要记住的五个组合
条件用 AND、OR、NOT 组合。加入第三个值 UNKNOWN 后,结果遵循同一个原则:如果已知的部分已经能决定答案,答案就是确定的;否则仍然是 UNKNOWN。
| 表达式 | 结果 | 原因 |
|---|---|---|
| TRUE AND UNKNOWN | UNKNOWN | 结果取决于缺失的部分 |
| FALSE AND UNKNOWN | FALSE | AND 只要有一个条件为假就为假 |
| TRUE OR UNKNOWN | TRUE | OR 只要有一个条件为真就为真 |
| FALSE OR UNKNOWN | UNKNOWN | 结果取决于缺失的部分 |
| NOT UNKNOWN | UNKNOWN | 未知的反面仍是未知 |
SQL 的三值逻辑遵循同样的规则;例如 PostgreSQL 的文档说明,它的 NULL 值表示“未知”。
完整例子
一条筛选规则:市盈率低于 15 AND 营收增长高于 0%。三只假设的证券,数字是虚构的。
| 证券 | 各条件 | 规则结果 |
|---|---|---|
| A | 市盈率 12:TRUE;增长 5%:TRUE | TRUE |
| B | 市盈率 20:FALSE;增长缺失:UNKNOWN | FALSE |
| C | 市盈率 10:TRUE;增长缺失:UNKNOWN | UNKNOWN |
- A 通过:两个条件都已知且为真。
- B 即使没有营收增长数据也不通过,因为它的市盈率已经让 AND 规则不成立。
- C 无法判断。如果把缺失数据当作 FALSE,C 会从结果中悄悄消失;当作 TRUE,C 会悄悄通过。两种做法都不是数据本身所说的。
把结果分成三组(通过、不通过、无法判断),C 就会保持可见:你可以去补齐缺失的数值,有意排除 C,或者在研究记录里注明这个缺口。
适用边界与常见误读
- UNKNOWN 不是猜测。 它不表示“可能为真”或“可能为假”,只表示规则无法判断。
- 条件的先后顺序不影响结果。 AND 和 OR 不论哪一边写在前面,结果都相同。
- 缺失和零不同。 营收增长 0% 是已知值(不满足“高于 0%”);缺失的数值才是 UNKNOWN。
- 这里解释的是方法。 它不表示本站提供规则检查器。