代码之家  ›  专栏  ›  技术社区  ›  Nrj

任何数据库表上的“从表名称中选择计数(1)”是什么意思?

  •  75
  • Nrj  · 技术社区  · 16 年前

    当我们执行 select count(*) from table_name 它返回行数。

    count(1) 做什么是 1 在这里有什么意义?这和我的一样吗 count(*) (因为它在执行时给出相同的结果)?

    9 回复  |  直到 8 年前
        1
  •  122
  •   Jeffrey L Whitledge    16 年前

    COUNT函数的参数是要为每行计算的表达式。COUNT函数返回表达式计算为非null值的行数。(*是一个不计算的特殊表达式,它只返回行数。)

    表达式还有两个附加修饰符:ALL和DISTINCT。这些参数确定是否丢弃重复项。由于ALL是默认值,因此您的示例与count(ALL 1)相同,这意味着保留重复项。

        2
  •  28
  •   Eddie Awad    16 年前

    这是 a link 这将有助于回答您的问题。简言之:

    内部计数(*)——自

    a) 计算1不为空的行数
    b) 数一数行

        3
  •  18
  •   rakesh rakesh    16 年前

    count(*)表示它将对所有记录(即每个单元格)进行计数 但是

    count(1)表示它将添加一个值为1的伪列,并返回所有记录的计数

        4
  •  9
  •   Sarathi Kamaraj    11 年前

    SELECT * FROM table_name and SELECT 1 FROM table_name.  
    

    如果你这样做

    SELECT 1 FROM table_name
    

    它将为表中的每一行提供数字1。所以是的 count(*) count(1) count(8) count(column_name)

        5
  •  7
  •   Cade Roux    16 年前

    没有区别。

    COUNT(1) 基本上只是为每行计算一个常量值1列。正如这里的其他用户所说,这与 COUNT(0) COUNT(42) . 任何非- NULL 价值就足够了。

    http://asktom.oracle.com/pls/asktom/f?p=100:11:2603224624843292::::P11_QUESTION_ID:1156151916789

    Oracle optimizer显然使用了bug,这导致计数受您选择的列以及它是否在索引中的影响,因此计数(1)约定应运而生。

        6
  •  6
  •   Sarathi Kamaraj    11 年前
    SELECT COUNT(1) from <table name>
    

    应该做和你一样的事情

    SELECT COUNT(*)  from <table name>
    

    SELECT COUNT(*) 在一些数据库中,但我会考虑数据库中的bug。

    SELECT COUNT(col_name) from <table name>
    

    但是,它有不同的含义,因为它只统计给定列中具有非null值的行。

        7
  •  3
  •   Jarod Elliott    16 年前

        8
  •  2
  •   Daanvn    11 年前

    您可以这样进行测试:

    create table test1(
     id number,
     name varchar2(20)
    );
    
    insert into test1 values (1,'abc');
    insert into test1 values (1,'abc');
    
    select * from test1;
    select count(*) from test1;
    select count(1) from test1;
    select count(ALL 1) from test1;
    select count(DISTINCT 1) from test1;
    
        9
  •  0
  •   Johann Zacharee    16 年前

    根据你问的人,有些人报告说 select count(1) from random_table; select count(*) from random_table . 其他人则声称他们完全一样。

    link