【问题标题】:What is the difference between count (*) and count(attribute_name)?count (*) 和 count(attribute_name) 有什么区别?
【发布时间】:2020-03-02 16:39:51
【问题描述】:

COUNT(*) 和 COUNT(attribute_name) 有什么区别吗?

我使用 count(attribute_name) 因为我认为它是特定的,因此搜索过程会更容易。这是真的吗?

很高兴看到任何带有我的问题的 sql 代码示例,以帮助我更好地理解

【问题讨论】:

标签: sql database oracle group-by count


【解决方案1】:

COUNT(*) 将计算所有行。 COUNT(column) 将仅计入 non-NULLs

您可以使用 COUNT(*)COUNT(column),这应仅基于所需的输出。

考虑下面的员工表示例

ID        Name      Description
1         Raji      Smart
2         Rahi      Positive
3 
4         Falle     Smart

从员工中选择计数(*);

Count(*)
4

从员工中选择计数(姓名);

Count(Name)
3

【讨论】:

  • count(Column Name) 计算重复行数。
  • 添加了避免混淆的示例
  • 这意味着如果我使用count(*),即使该行没有数据,它也会计算表中的所有数据。对吗?
  • 这个解释有点混乱
  • 是的,确切地 count(*) 将计算具有空值的行,而 count(column) 不会..有什么令人困惑的地方请告诉我...我提供了非常简单的示例..如果你有什么例子我可以解释得更好..
【解决方案2】:

区别很简单:COUNT(*)统计查询产生的行数,而COUNT(1)统计1 价值观。请注意,当您在查询中包含诸如数字或字符串之类的文字时,此文字将“附加”或附加到 FROM 子句生成的每一行。

更多详情this链接会帮助你理解。

【讨论】:

    【解决方案3】:

    COUNT(*) 统计组中的所有记录。

    COUNT(column_name) 只计算非空值。

    还有另一个典型的表达式COUNT(DISTINCT column_name),它计算非空的不同值。

    既然你要求,这里是一个demo on DB Fiddlde

    with t as (
        select 1 x from dual
        union all select 1 from dual
        union all select null from dual
    )
    select count(*), count(x), count(distinct x) from t
    
    计数(*) |计数(X) |计数(DISTINCTX) --------: | --------: | ---------------: 3 | 2 | 1

    【讨论】:

      【解决方案4】:

      想象一下这张桌子:

      
      select Count(TelephoneNumber) from Calls -- returns 3
      select Count(*) from Calls -- returns 4
      

      count(column_name) 也计算重复值。考虑:

      select Count(TelephoneNumber) from Calls -- returns 4
      

      【讨论】:

      • 我最明白你的解释了!谢谢
      【解决方案5】:

      count() 只计算非空值。 * 引用完整的行,因此从不排除任何行。 count(attribute_name) 只计算该列不为空的行。

      所以:

      select count(attribute_name)
      from the_table
      

      相当于:

      select count(*)
      from the_table
      where attribute_name is not null
      

      【讨论】:

      • 所以这意味着如果我使用 count(attribute_name),即使该行没有数据,它也会计算表中的所有数据。对吗?
      • 不,相反:它将计算 确实包含数据的所有行。看第二个查询
      猜你喜欢
      • 2011-02-22
      • 2020-11-10
      • 2014-06-09
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      • 1970-01-01
      • 2015-03-03
      相关资源
      最近更新 更多