在SQL中,count(column)和count(*)有什么区别?
技术问答
217 人阅读
|
0 人回复
|
2023-09-14
|
我有以下查询:
. d$ f% C; c% @( ~/ A, p0 b% Kselect column_name, count(column_name)! I3 G8 S6 E2 Q' y: r+ b# O
from table
8 Y3 f& w; J( S' d" Z9 Vgroup by column_name
: g8 d0 I; x+ p2 I4 B+ A* Uhaving count(column_name) > 1;0 W. h* B+ _: l7 \
& J& w; } V3 d+ T c/ `* U会有什么区别,如果我更换,所有呼叫count(column_name)到count(*)?
& c1 V3 g+ g( Q4 D这个问题的灵感源于我如何在Oracle的表中找到重复的值?。7 V8 C4 l M8 {% A8 B
为了澄清接受的答案(也许我的问题),替换count(column_name)与count(*)将在包含一个结果返回额外的行null和计数null列中的值。% ~* q* E8 q! A! w% u3 H2 I
; V' B& z b9 E# @; a) l0 n3 S解决方案:& K. J) n$ R, G
2 Q! ?" }9 W ^6 a4 N0 c/ I$ d
+ F. f; e& T$ i5 F6 t* w% `
9 { }6 P* r3 K4 y! F count(*)计数为NULL而count(column)不是$ q( d% D/ }9 h# O" {& q5 J" c
[编辑]添加了此代码,以便人们可以运行它
$ ?6 Z, H0 x/ t3 H. r1 ccreate table #bla(id int,id2 int): _% q+ A+ j2 g' {; z/ H
insert #bla values(null,null)
" T! D, w* P7 |1 l. ~; p* z% @insert #bla values(1,null)
8 B2 X+ C; b& k: `insert #bla values(null,1)
! Z0 z; v' ~, x) u$ C. u) binsert #bla values(1,null)
' s$ R" K% \! E1 O' k9 }insert #bla values(null,1)
* w% ~0 j! \% J/ U5 g2 Q! ~# q$ minsert #bla values(1,null)- m- q, b9 X( G, g) C. z; t7 V: O6 ?7 ^
insert #bla values(null,null); C! Y6 I z9 k4 d- S
select count(*),count(id),count(id2). r2 `- W$ J A4 X) A
from #bla
/ n5 P, M0 Q! V+ U# z2 e3 k( p: ~1 A5 `0 Y! ^( W
结果7 3 2 |
|
|
|
|
|