Count(*)和Count(field_name)返回Oracle中的差异输出

时间:2018-08-20 07:13:12

标签: sql oracle

有两个简单的查询(因为它们很简单,我很困惑):

第一个:

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

第二个:

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

这两个查询之间唯一的区别是count(employee_id)count(*),其余两个完全相同,但结果却不同。

第二个查询在有一些空值时返回零。
是什么问题或我不知道的其他事情?

1 个答案:

答案 0 :(得分:5)

第二个查询将对具有非空(NOT NULLEMPLOYEE_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