在 SQLite 中,COUNT 函数是一个非常实用的聚合函数,主要用于统计记录的数量。它有不同的使用方式,下面为你详细介绍其使用方法并给出具体示例。
基本语法
COUNT 函数常见的使用形式有以下两种:
- COUNT(*):统计查询结果集中的所有行数,无论列中是否包含 NULL 值。
- COUNT(column_name):统计指定列中非 NULL 值的行数。
使用示例
1. 使用COUNT(*)统计所有行数
假设我们有一个名为 employees 的表,用于存储员工信息,包含 employee_id、name 和 department 等列。
-- 创建示例表
CREATE TABLE employees (
employee_id INTEGER PRIMARY KEY,
name TEXT,
department TEXT
);
-- 插入示例数据
INSERT INTO employees (name, department) VALUES ('Alice', 'HR');
INSERT INTO employees (name, department) VALUES ('Bob', 'IT');
INSERT INTO employees (name, department) VALUES ('Charlie', 'Finance');
-- 使用 COUNT(*) 统计员工数量
SELECT COUNT(*) AS total_employees FROM employees;
在上述查询中,COUNT(*) 会统计 employees 表中的所有行数,这里结果为 3,并将结果存储在 total_employees 列中。
2. 使用COUNT(column_name)统计非NULL值的行数
假设 employees 表中有一个 email 列,部分员工可能没有提供邮箱信息,即该列存在 NULL 值。
-- 修改表结构,添加 email 列
ALTER TABLE employees ADD COLUMN email TEXT;
-- 更新部分员工的邮箱信息
UPDATE employees SET email = 'alice@example.com' WHERE employee_id = 1;
UPDATE employees SET email = 'bob@example.com' WHERE employee_id = 2;
-- 使用 COUNT(email) 统计有邮箱信息的员工数量
SELECT COUNT(email) AS employees_with_email FROM employees;
在这个查询中,COUNT(email) 只会统计 email 列中非 NULL 值的行数,这里结果为 2,并将结果存储在 employees_with_email 列中。
3. 结合GROUP BY子句使用COUNT函数
假设我们想统计每个部门的员工数量,可以使用 GROUP BY 子句按 department 列进行分组,然后使用 COUNT 函数统计每个组中的行数。
-- 使用 COUNT(*) 结合 GROUP BY 统计每个部门的员工数量
SELECT
department,
COUNT(*) AS employees_per_department
FROM
employees
GROUP BY
department;
这个查询会将 employees 表按 department 列的值进行分组,然后分别统计每个部门的员工数量。例如,如果有 2 名员工在 'IT' 部门,1 名员工在 'HR' 部门,查询结果会显示每个部门及其对应的员工数量。
4. 结合HAVING子句筛选统计结果
如果我们只想查看员工数量大于 1 的部门,可以使用 HAVING 子句对 GROUP BY 分组后的结果进行筛选。
-- 使用 COUNT(*) 结合 GROUP BY 和 HAVING 筛选员工数量大于 1 的部门
SELECT
department,
COUNT(*) AS employees_per_department
FROM
employees
GROUP BY
department
HAVING
COUNT(*) > 1;
在这个查询中,HAVING 子句会筛选出员工数量大于 1 的部门,只返回满足条件的部门及其员工数量。
注意事项
- COUNT(*) 会统计所有行,包括包含 NULL 值的行;而 COUNT(column_name) 只统计指定列中非 NULL 值的行。
- 在使用 GROUP BY 子句时,COUNT 函数会对每个分组分别进行统计。
- HAVING 子句用于筛选分组后的统计结果,而 WHERE 子句用于筛选原始数据行。