我有以下查询:
select column_name, count(column_name)
from table
group by column_name
having count(column_name) > 1;
Run Code Online (Sandbox Code Playgroud)
会有什么区别,如果我更换了所有调用count(column_name)到count(*)?
这个问题的灵感来自于如何在Oracle中的表中找到重复值?.
为了澄清已接受的答案(也许是我的问题),替换count(column_name)为count(*)将在结果中返回一个额外的行,其中包含a null和null列中的值计数.
SQL*_*ace 230
count(*)计数NULL而count(column)不是
[edit]添加了此代码,以便人们可以运行它
create table #bla(id int,id2 int)
insert #bla values(null,null)
insert #bla values(1,null)
insert #bla values(null,1)
insert #bla values(1,null)
insert #bla values(null,1)
insert #bla values(1,null)
insert #bla values(null,null)
select count(*),count(id),count(id2)
from #bla
Run Code Online (Sandbox Code Playgroud)
结果7 3 2
Bra*_*non 37
使用*和特定列之间的另一个细微差别是,在列情况下,您可以添加关键字DISTINCT,并将计数限制为不同的值:
select column_a, count(distinct column_b)
from table
group by column_a
having count(distinct column_b) > 1;
Run Code Online (Sandbox Code Playgroud)
Ala*_*lan 16
另一个也许是微妙的区别是,在某些数据库实现中,count(*)是通过查看有问题的表上的索引而不是实际的数据行来计算的.由于没有指定特定的列,因此无需担心实际的行及其值(如果您计算了特定的列,则会如此).允许数据库使用索引数据可能比将其计为"实际"行要快得多.
Bil*_*ard 10
我们可以使用Stack Exchange Data Explorer来说明与简单查询的区别.Stack Overflow数据库中的Users表具有通常留空的列,如用户的网站URL.
-- count(column_name) vs. count(*)
-- Illustrates the difference between counting a column
-- that can hold null values, a 'not null' column, and count(*)
select count(WebsiteUrl), count(Id), count(*) from Users
Run Code Online (Sandbox Code Playgroud)
如果您在数据资源管理器中运行上面的查询,您将看到计数是相同的count(Id),count(*)因为该Id列不允许null值.该WebsiteUrl数要低得多,但是,因为该列允许null.
| 归档时间: |
|
| 查看次数: |
42874 次 |
| 最近记录: |