3 回答

TA貢獻1859條經(jīng)驗 獲得超6個贊
是的,因為它是一個聚合并返回零。除非您添加GROUP BY,否則沒有結(jié)果,因為沒有組...
除非您添加GROUP BY然后沒有行,否則MAX / SUM等將返回NULL。只有COUNT會返回一個沒有結(jié)果的數(shù)字
編輯,有點晚:SUM會像MAX一樣返回NULL

TA貢獻1798條經(jīng)驗 獲得超7個贊
是的,“count”函數(shù)本身的返回值始終是非null整數(shù),無例外。
話雖如此,您可能對查詢的返回值更感興趣,這實際上是一個結(jié)果集。如果是這種情況,那么您只需要考慮您的查詢是否包含“group by”子句。
一個非分組查詢中包含聚合函數(shù)
select count(*), sum(*), max(*), min(*) from table
生成具有單個記錄的結(jié)果集包含聚合函數(shù)的返回值。在這種情況下,結(jié)果集將始終只有一條記錄,其中的列包含您包含的任何聚合函數(shù)的返回值。在此單獨記錄中,count的返回值將始終為非null整數(shù),而其他聚合函數(shù)(如min,max和sum)的返回值可能為null。在上面的示例中,您返回的記錄可能是“零,null,null,null”,但永遠不會是“null,null,null,null”,因為count永遠不會返回null。因此,如果您只調(diào)用“count”,那么返回的那一條記錄中的那一列將始終包含count的非null返回值; 因此,您可以放心,計數(shù)查詢的標量返回值將始終為非空整數(shù)。
另一方面,具有聚合函數(shù)的分組查詢
select count(*), sum(*), max(*), min(*) from table group by column
生成具有零個或多個記錄的結(jié)果集,其中每個記錄包含所標識的每個組的聚合函數(shù)的返回值。在這種情況下,如果沒有標識組,則沒有用于運行聚合函數(shù)的組,函數(shù)永遠不會運行,并且“查詢返回值”將是一個空集,根本沒有記錄。
在沒有記錄的表上測試它以查看結(jié)果:
create table #t (c int);select COUNT(c), MIN(c), MAX(c), SUM(c) from #t; --returns one record {0, null, null, null}select COUNT(c), MIN(c), MAX(c), SUM(c) from #t group by c; --returns no recordsdrop table #t;
因此,無論您是調(diào)用count,min,max還是sum,重要的是不僅要了解各個聚合函數(shù)的返回值,還要了解查詢本身的“返回值”以及結(jié)果集包含的內(nèi)容。
添加回答
舉報