SQLite count() 函数使用指南
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_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;
name login_date
---- ----------
Tim 20220724
Tim 20220725
Tim 20220726
Tom
Tom 20220723
Tom 20220725
这里,我们拥有了关于用户登录日期的一些行,并且每一行中是一个用户的一次登录记录。其中,最后一行的登录日期为 NULL
。
如果我们需要统计每个人的登录次数,请使用以下语句:
SELECT
t.name,
count(login_date) login_times
FROM (
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
) t
GROUP BY t.name;
name login_times
---- -----------
Tim 3
Tom 2
这里,我们发现,用户 Tom 的登录次数是 2 次,这并不正确。 产生这个结果的原因是 count(login_date)
只统计了 login_date
列中非 NULL
的数量。为了纠正这个错误,我们需要使用 count(*)
,如下:
SELECT
t.name,
count(*) login_times
FROM (
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
) t
GROUP BY t.name;
name login_times
---- -----------
Tim 3
Tom 3