SQL面试题更新 2026-08-05

针对访问记录表,请写出一个 SQL 查询,用于统计每个用户的总访问次数。

编码实现SQL

考察说明

考查 SQL 中 GROUP BY 和聚合函数 COUNT 的基本用法,以及别名和结果列的处理。

回答思路

  1. 【回答框架 1】这是一个典型的按用户维度进行分组统计的查询。核心操作是使用 GROUP BY 对用户标识列进行分组,然后使用 COUNT(*) 或 COUNT(列名) 对每组内的记录行数进行计数。
  2. 【回答框架 2】完整 SQL 形如:SELECT 用户列, COUNT(*) AS 总访问次数 FROM 访问记录表 GROUP BY 用户列。其中,用户列是表中用于标识访问者的字段,访问记录表是实际表名。
  3. 【回答框架 3】COUNT(*) 会统计包括 NULL 在内的所有行;如果希望只统计某列非 NULL 的访问记录,可以使用 COUNT(访问时间列) 或 COUNT(其他非空列)。
  4. 【回答框架 4】使用别名 AS 可以让结果列名更清晰,如 AS 总访问次数。在多数数据库(MySQL、PostgreSQL、SQL Server、Oracle)中,GROUP BY 后可以直接使用原列名,但不应使用别名(部分数据库不支持)。
  5. 【关键点 1】核心语法:SELECT 用户列, COUNT(*) FROM 表 GROUP BY 用户列。
  6. 【关键点 2】COUNT(*) 和 COUNT(列) 的差异:COUNT(*) 计算所有行,COUNT(列) 忽略 NULL。
  7. 【关键点 3】结果按用户分组,每个用户一行,第二列为该用户的总访问次数。
  8. 【易错点 1】容易忘记 GROUP BY,导致统计错误。
  9. 【易错点 2】误用 COUNT(1) 或 COUNT(*) 的时间效率差异,在大多数数据库上优化器会处理,无需刻意区分。
  10. 【易错点 3】部分方言要求 SELECT 列表中非聚合列必须出现在 GROUP BY 中,违背会报错。