亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

COUNT(*)總是返回結果嗎?

COUNT(*)總是返回結果嗎?

慕標琳琳 2019-11-03 08:04:16
COUNT(*)總是返回結果嗎?如果我運行查詢,例如:SELECT COUNT(*) as num FROM table WHERE x = 'y'它是否總是返回結果,即使查詢與任何記錄都不匹配?或者我是否需要驗證并確保返回一行作為結果?
查看完整描述

3 回答

?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

是的,因為它是一個聚合并返回零。除非您添加GROUP BY,否則沒有結果,因為沒有組...

除非您添加GROUP BY然后沒有行,否則MAX / SUM等將返回NULL。只有COUNT會返回一個沒有結果的數字

編輯,有點晚:SUM會像MAX一樣返回NULL


查看完整回答
反對 回復 2019-11-04
?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

是的,“count”函數本身的返回值始終是非null整數,無例外。

話雖如此,您可能對查詢的返回值更感興趣,這實際上是一個結果集。如果是這種情況,那么您只需要考慮您的查詢是否包含“group by”子句。

一個非分組查詢中包含聚合函數

select count(*), sum(*), max(*), min(*) from table

生成具有單個記錄的結果集包含聚合函數的返回值。在這種情況下,結果集將始終只有一條記錄,其中的列包含您包含的任何聚合函數的返回值。在此單獨記錄中,count的返回值將始終為非null整數,而其他聚合函數(如min,max和sum)的返回值可能為null。在上面的示例中,您返回的記錄可能是“零,null,null,null”,但永遠不會是“null,null,null,null”,因為count永遠不會返回null。因此,如果您只調用“count”,那么返回的那一條記錄中的那一列將始終包含count的非null返回值; 因此,您可以放心,計數查詢的標量返回值將始終為非空整數。

另一方面,具有聚合函數的分組查詢

select count(*), sum(*), max(*), min(*) from table group by column

生成具有零個或多個記錄的結果集,其中每個記錄包含所標識的每個組的聚合函數的返回值。在這種情況下,如果沒有標識組,則沒有用于運行聚合函數的組,函數永遠不會運行,并且“查詢返回值”將是一個空集,根本沒有記錄。

在沒有記錄的表上測試它以查看結果:

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;

因此,無論您是調用count,min,max還是sum,重要的是不僅要了解各個聚合函數的返回值,還要了解查詢本身的“返回值”以及結果集包含的內容。



查看完整回答
反對 回復 2019-11-04
?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

聚合函數Count()始終返回值

查看完整回答
反對 回復 2019-11-04
  • 3 回答
  • 0 關注
  • 549 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號