Nrj*_*Nrj 85 sql database oracle
当我们执行select count(*) from table_name它时返回行数.
怎么count(1)办?1这里有什么意义?这是否相同count(*)(因为它在执行时给出了相同的结果)?
Jef*_*dge 99
COUNT函数的参数是要为每一行计算的表达式.COUNT函数返回表达式求值为非空值的行数.(*是一个未计算的特殊表达式,它只返回行数.)
表达式还有两个额外的修饰符:ALL和DISTINCT.这些确定是否丢弃重复项.由于ALL是默认值,因此您的示例与count(ALL 1)相同,这意味着保留重复项.
由于表达式"1"对于每一行计算为非null,并且由于您没有删除重复项,因此COUNT(1)应始终返回与COUNT(*)相同的数字.
这类似于之间的区别
SELECT * FROM table_name and SELECT 1 FROM table_name.  
如果你这样做
SELECT 1 FROM table_name
它将为您提供表中每行的数字1.所以是的count(*),count(1)并将提供与将count(8)或相同的结果count(column_name)
没有区别.
COUNT(1)基本上只计算每行的常量值1列.正如其他用户所说的那样,它和COUNT(0)or一样COUNT(42).任何非NULL价值都足够了.
http://asktom.oracle.com/pls/asktom/f?p=100:11:2603224624843292::::P11_QUESTION_ID:1156151916789
Oracle优化器显然使用了它中的错误,这导致计数受到您选择的列以及它是否在索引中的影响,因此COUNT(1)约定应运而生.
SELECT COUNT(1) from <table name>
应该做与
SELECT COUNT(*)  from <table name>
它可能会或仍然有一些原因会使其比SELECT COUNT(*)某些数据库更好,但是我认为这是数据库中的错误。
SELECT COUNT(col_name) from <table name>
但是具有不同的含义,因为对于给定的列,它仅对具有非null值的行进行计数。