SQLite
count()函数统计一个分组中的所有指定的值的数量并返回。
count()
语法
这里是 SQLite
count()的语法:
count(expr)
我们通常在 SQLite 中按如下方式使用
count()函数:
SELECT count(expr), ...FROM table_name[WHERE ...][GROUP BY group_expr1, group_expr2, ...];
参数
expr必需的。一个要统计数量的的列名或者表达式,或者
*表示所有的列。
返回值
SQLite
count(*)函数返回一个分组中的所有行的数量,
count(column_name)函数返回一个分组中的非空的值的数量。
count()
示例
为了演示
count()的用法,我们使用以下
UNION语句模拟一个表:
SELECT 'Tim' name, '20220726' login_dateUNIONSELECT 'Tim' name, '20220725' login_dateUNIONSELECT 'Tim' name, '20220724' login_dateUNIONSELECT 'Tom' name, '20220725' login_dateUNIONSELECT 'Tom' name, '20220723' login_dateUNIONSELECT 'Tom' name, NULL login_date;
name login_date---- ----------Tim 20220724Tim 20220725Tim 20220726TomTom 20220723Tom 20220725
这里,我们拥有了关于用户登录日期的一些行,并且每一行中是一个用户的一次登录记录。其中,最后一行的登录日期为
NULL。
如果我们需要统计每个人的登录次数,请使用以下语句:
SELECT t.name, count(login_date) login_timesFROM ( SELECT 'Tim' name, '20220726' login_date UNION SELECT 'Tim' name, '20220725' login_date UNION SELECT 'Tim' name, '20220724' login_date UNION SELECT 'Tom' name, '20220725' login_date UNION SELECT 'Tom' name, '20220723' login_date UNION SELECT 'Tom' name, NULL login_date) tGROUP BY t.name;
name login_times---- -----------Tim 3Tom 2
这里,我们发现,用户 Tom 的登录次数是 2 次,这并不正确。 产生这个结果的原因是
count(login_date)只统计了
login_date列中非
NULL的数量。为了纠正这个错误,我们需要使用
count(*),如下:
SELECT t.name, count(*) login_timesFROM ( SELECT 'Tim' name, '20220726' login_date UNION SELECT 'Tim' name, '20220725' login_date UNION SELECT 'Tim' name, '20220724' login_date UNION SELECT 'Tom' name, '20220725' login_date UNION SELECT 'Tom' name, '20220723' login_date UNION SELECT 'Tom' name, NULL login_date) tGROUP BY t.name;
name login_times---- -----------Tim 3Tom 3
