本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
COUNT函數
該COUNT函數計算由表達式定義的行。
該COUNT函數具有以下變化。
COUNT(*)計算目標表中的所有行,無論它們是否包含空值。
COUNT(表達式)計算特定列或表達式中具有非NULL值的行數。
COUNT(DISTINCT表達式)計算列或表達式中不同非NULL值的數量。
APPROXIMATECOUNTDISTINCT近似欄或運算式中不同非NULL值的數目。
語法
COUNT( * | expression )
COUNT ( [ DISTINCT | ALL ] expression )
APPROXIMATE COUNT ( DISTINCT expression )
引數
- expression
-
函數運算的目標欄或表達式。該COUNT函數支持所有參數數據類型。
- DISTINCT | ALL
-
使用引數時DISTINCT,函數會在執行計數之前,從指定的運算式中排除所有重複的值。使用引數時ALL,函數會保留運算式中所有重複的值以供計數。ALL為預設值。
- APPROXIMATE
-
搭配使用時APPROXIMATE,COUNTDISTINCT函數會使用 HyperLogLog 演算法來近似資料行或運算式中不同非NULL值的數目。使用APPROXIMATE關鍵字的查詢執行速度更快,相對誤差約為 2%。如果每個查詢或每一組 (若有 group by 子句) 傳回數百萬個以上的大量相異值,則查詢一定要採用近似法。如果相異值較少 (數千個),則近似法可能比精確計數更慢。APPROXIMATE只能與一起使用COUNTDISTINCT。
傳回類型
該COUNT函數返回BIGINT。
範例
計算佛羅里達州的所有使用者人數:
select count(*) from users where state='FL';
count ------- 510
計算表中的所有事件名EVENT稱:
select count(eventname) from event;
count ------- 8798
計算表中的所有事件名EVENT稱:
select count(all eventname) from event;
count ------- 8798
IDs從EVENT表中計算所有獨特的場地:
select count(distinct venueid) as venues from event;
venues -------- 204
計算每個賣方列出整批銷售門票超過四張的次數。結果依賣方 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時間APPROXIMATECOUNT。
select count(distinct pricepaid) from sales;
count ------- 4528 Time: 48.048 ms
select approximate count(distinct pricepaid) from sales;
count ------- 4553 Time: 21.728 ms