如果我運行一個查詢,如:COUNT(*)總是返回結果嗎?
SELECT COUNT(*) as num FROM table WHERE x = 'y'
將它總是返回一個結果,即使在查詢不匹配任何記錄?或者我需要驗證並確保返回一行作爲結果?
如果我運行一個查詢,如:COUNT(*)總是返回結果嗎?
SELECT COUNT(*) as num FROM table WHERE x = 'y'
將它總是返回一個結果,即使在查詢不匹配任何記錄?或者我需要驗證並確保返回一行作爲結果?
是的,因爲它是一個總量和返回零。 除非您添加GROUP BY,在沒有組的情況下沒有結果...
MAX/SUM等將返回NULL,除非您添加GROUP BY,否則無行。 只算返回任何結果
編輯,有點晚了一些:SUM將返回NULL像MAX
編輯,2013年5月:這適用於所有主要的RDBMS。我猜根據ANSI標準
它說我可以在11分鐘內接受,wtf ... – 2010-03-31 10:35:57
SUM()函數怎麼樣,它們會返回0還是NULL? – 2010-03-31 10:36:50
@Click Upvote:對不起,我沒有回答。 SUM給出像MAX一樣的NULL值。只有COUNT返回0 – gbn 2011-01-18 06:04:09
是它會返回一個數字總是
聚合函數COUNT()總是返回值
是的,它會在這種情況下返回0。
總會有結果的一排這樣的:
| COUNT(*) |
------------
| 0 |
如果沒有匹配。
順便說一句,我寧願只計算主鍵而不是*
。
'COUNT(*)'與一般的COUNT(列)不同。計數列將檢查不同的值,而不是所有的記錄。當然,當你計算你的主鍵時,你將得到所有的記錄,因爲主鍵必須是唯一的,但這不會比COUNT(*)'快,並且可能會更慢(除非MySQL自動優化回COUNT(* )')。 – 2010-03-31 17:27:03
@Ty W - 「計數列檢查不同的值」。不,這是不正確的,除非你指定'distinct'關鍵字。它計算的值不是'NULL' – 2011-01-18 13:40:08
如果沒有記錄匹配計數將返回0 (所以是的,總是指望返回結果,除非你有一些語法錯誤)
是的,返回值的「count」函數本身始終是一個非空整數,沒有例外。
說了這麼多,你可能會更感興趣的是你查詢,這實際上是一個結果集的返回值。如果是這樣的話,那麼你只需要考慮你的查詢是否包含「group by」子句。與集合函數
甲非分組查詢像
select count(*), sum(*), max(*), min(*) from table
產生與含有骨料(多個)功能的返回值(一個或多個)單個記錄的結果集。在這種情況下,您的結果集總是隻有一條記錄,列中包含您包含的任何聚合函數的返回值。在這個單獨的記錄中,count的返回值將始終爲非空整數,而其他聚合函數(如min,max和sum)的返回值可能爲null。在上面的例子中,你返回的記錄可能是「零,空,空,空」,但永遠不會是「null,null,null,null」,因爲count永遠不會返回null。所以如果你只調用「count」,那麼返回的那條記錄中的那一列將總是包含count的非空返回值;因此您可以放心,計數查詢的標量返回值將始終爲非空整數。
在另一方面,與集合函數的分組查詢像
select count(*), sum(*), max(*), min(*) from table group by column
產生具有零個或多個記錄的結果集,其中每個記錄包含聚合函數的返回值( s)爲每個組確定。在這種情況下,如果沒有標識的組,則不會運行集合函數的組,函數將永遠不會運行,並且「查詢返回值」將是一個完全沒有記錄的空集。
測試出來的,沒有記錄的表看到的結果:
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 records
drop table #t;
所以,不管你調用計數,最小值,最大值或總和,重要的是不僅可以瞭解的返回值的單個集合函數,還包括查詢本身的「返回值」以及結果集包含的內容。
謝謝!只是想讓你知道在MySQL上我不能執行SUM(*)。 – CMCDragonkai 2015-12-24 03:38:42
難以測試嗎? – 2010-03-31 10:33:53
@col yea :)',' – 2010-03-31 10:34:36
@col沒有嘗試,只是想在這裏,我想他希望觀衆「點擊Upvote」他的問題。 – raj 2010-03-31 10:37:13