我无法理解SQL查询输出:
SQL> select distinct(STATUS) from TMP_ORDER_ACTION_PSTN_CP_11035;
InDelivery_SOMBe
In Delivery
Complete
Amended
Cancelled
Failed InComplete
1 SQL> select count(*) from TMP_ORDER_ACTION_PSTN_CP_11035 where
STATUS='Complete';
1484
2 SQL> select count(*) from TMP_ORDER_ACTION_PSTN_CP_11035 where STATUS
!= 'Complete';
3167
3 SQL> select count(*) from TMP_ORDER_ACTION_PSTN_CP_11035;
5091
1和2查询的计数总和应与总计数(3查询)相同。为什么总和与整数不同? 这似乎是一个转储问题,但我不知道为什么会发生这种情况。 请注意,我的问题根本与空检查无关。就是这样 sum(1 + 2)= 3.1484 + 3167!= 5091.为什么结果不同?
答案 0 :(得分:4)
我的猜测是NULL值,它们不匹配任何WHERE子句,包括最后一个。尝试
select count(*) from TMP_ORDER_ACTION_PSTN_CP_11035 where STATUS is null;
where status = null
永远不会是真的,where null = null
也不是。您必须使用is null
。
1和2查询的计数总和应与总计数(3查询)相同。为什么总和与整数不同?
不,因为带有NULL的记录与查询1或查询2不匹配,但它们在查询3中计算。
1 + 2 + IS NULL应该等于3.
答案 1 :(得分:4)
WHERE STATUS = NULL
无效。没有什么等于NULL
。
尝试使用IS
代替=
...
select count(*) from TMP_ORDER_ACTION_PSTN_CP_11035 where STATUS IS null
答案 2 :(得分:0)
试试这个:
假设p_key是表的主键,
select count(p_key) from TMP_ORDER_ACTION_PSTN_CP_11035 where STATUS='Complete';
select count(p_key) from TMP_ORDER_ACTION_PSTN_CP_11035 where STATUS <> 'Complete';
select count(p_key) from TMP_ORDER_ACTION_PSTN_CP_11035 ;