本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
COUNT 函數
COUNT 函數計算表達式所定義的列數。
COUNT 函數有三種版本。COUNT ( * ) 計算目標資料表中的所有列數,而不論是否包含 Null。COUNT (expression) 計算特定欄或表達式中不含 NULL 值的列數。COUNT (DISTINCT expression) 計算某欄或表達式中相異非 NULL 值的個數。
Syntax (語法)
[ APPROXIMATE ] COUNT ( [ DISTINCT | ALL ] * | expression )
引數
- expression
-
函數運算的目標欄或表達式。
- DISTINCT | ALL
-
如果指定引數 DISTINCT,則函數在計數之前會從指定的表達式中消除所有重複值。如果指定引數 ALL,則函數在計數時會保留表達式中的所有重複值。ALL 為預設值。
- APPROXIMATE
-
當與近似值一起使用時,計數(不同表達函數使用 HyperLogLog 演算法,大致估計某欄或表達式中相異非 NULL 值的個數。使用 APPROXIMATE 關鍵字的查詢運行較快,其相對錯誤率低到約 2%。如果每個查詢或每一組 (若有 group by 子句) 傳回數百萬個以上的大量相異值,則查詢一定要採用近似法。如果相異值較少 (數千個),則近似法可能比精確計數更慢。APPROXIMATE 只能與 COUNT (DISTINCT) 一起使用。
資料類型
COUNT 函數支援所有引數資料類型。
COUNT 函數傳回 BIGINT。
範例
計算佛羅里達州的所有使用者人數:
select count (*) from users where state='FL'; count ------- 510 (1 row)
從 EVENT 資料表計算所有唯一會場 ID 的數目:
select count (distinct venueid) as venues from event; venues -------- 204 (1 row)
計算每個賣方列出整批銷售門票超過四張的次數。結果依賣方 ID 分組:
select count(*), sellerid from listing where numtickets > 4 group by sellerid order by 1 desc, 2; count | sellerid -------+---------- 12 | 6386 11 | 17304 11 | 20123 11 | 25428 ...
下列範例比較 COUNT 和 APPROXIMATE COUNT 的傳回值和執行時間。
select count(distinct pricepaid) from sales; count ------- 4528 (1 row) Time: 48.048 ms select approximate count(distinct pricepaid) from sales; count ------- 4541 (1 row) Time: 21.728 ms