有两个简单的查询(因为它们很简单,我很困惑):
第一个:
select count(*)
from (select e.id as employee_id
from offic o
left join employee e
on o.employee_id = e.id)
where employee_id is null
Run Code Online (Sandbox Code Playgroud)
第二个:
select count(employee_id)
from (select e.id as employee_id
from offic o
left join employee e
on o.employee_id = e.id)
where employee_id is null
Run Code Online (Sandbox Code Playgroud)
这两个查询之间的唯一区别是count(employee_id)和count(*),其余的完全相同,但它们的结果是不同的.
当存在一些空值时,第二个查询返回零.
有什么不对或其他我不知道的事情?
第二个查询计算具有非empty(NOT NULL)EMPLOYEE_ID列值的行.第一个计算所有行,无论是什么行EMPLOYEE_ID.
[编辑:一个简单的例子,显示正在计算的内容]
阅读下面的评论,好吧,其中一些似乎是错误的(或者我误解了作者的意图)所以 - 这里你去(基于11.2.0.4.0).
SQL> select * From a1_test;
COL1 COL2 COL3
---------- ---------- ----------
1 3
1 2
1 2 3
2 3
3
SQL>
SQL> select
2 count(*) cnt,
3 count(1) cnt_1,
4 count(2) cnt_2,
5 count(3) cnt_3,
6 --
7 count(col1) cnt_c1,
8 count(col2) cnt_c2,
9 count(col3) cnt_c3
10 from a1_test;
CNT CNT_1 CNT_2 CNT_3 CNT_C1 CNT_C2 CNT_C3
---------- ---------- ---------- ---------- ---------- ---------- ----------
5 5 5 5 3 3 4
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |