#COUNT
COUNT函数按给定参数expr统计记录行数,该函数返回一个BIGINT的数值,且永远不会返回NULL。
在单行计算中,当expr的值为NULL时,函数返回0。
在多行计算中,当expr为字面量、变量、常量时,函数统计的是所有行,包括空行。否则,函数将忽略expr值为空的行,当所有行均为空时,计算结果为0。
聚集函数不可嵌套,因此expr为除聚集函数之外的其他通用表达式。
*
表示统计所有的行,包括空行。
DISTINCT
表示将表达式结果进行重复过滤,统计的是所有不重复的非空行。
ALL
默认值,表示不对表达式结果进行重复过滤,统计的是所有非空行。
示例
--统计机构表的行数
SELECT COUNT(1) res FROM branches;
RES
---------------------
12
--统计机构表中area_no字段非空的行数,该语句与SELECT COUNT(ALL area_no) FROM branches查询结果一致
SELECT COUNT(area_no) res FROM branches;
RES
---------------------
10
--统计机构表中area_no字段非空且不值不相同的行数
SELECT COUNT(DISTINCT area_no) res FROM branches;
RES
---------------------
4
OVER
当指定OVER关键字时,COUNT将作为窗口函数,并支持滑动窗口,返回多行的统计行数。
分布式部署中不可指定本关键字。
analytic_clause
窗口函数通用语法。
示例
--finance_info表记录了分年、月、机构的收入情况
SELECT year,month,branch,revenue_total FROM finance_info;
YEAR MONTH BRANCH REVENUE_TOTAL
----- ----- ------ -------------
2001 01 0201 2888
2021 01 0201 28888
2021 01 0101 38888
2021 02 0101 37778
--分年统计每月存在收入的机构数
SELECT year,month,
COUNT(revenue_total) OVER (PARTITION BY year ORDER BY month) toall
FROM finance_info;
YEAR MONTH TOALL
----- ----- ---------------------
2001 01 1
2021 01 2
2021 01 2
2021 02 3
--分年统计每月年初至今存在收入的机构数
SELECT year,month,
COUNT(revenue_total) OVER (PARTITION BY year ORDER BY month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) tonow
FROM finance_info;
YEAR MONTH TONOW
----- ----- ---------------------
2001 01 1
2021 01 1
2021 01 2
2021 02 3