SQL面试题更新 2026-08-05

请用 SQL 实现:统计每位用户访问过的去重页面数量,并只返回访问页面数超过 1 的用户及其计数。

编码实现技术原理SQL

考察说明

考查 SQL 分组聚合、去重统计及 HAVING 过滤的运用能力。

回答思路

  1. 【回答框架 1】核心是 GROUP BY 按用户分组,COUNT(DISTINCT 页面) 统计每个用户访问的不同页面数,DISTINCT 用于去除重复页面访问记录。
  2. 【回答框架 2】使用 HAVING COUNT(DISTINCT 页面) > 1 过滤分组后的结果,HAVING 作用于分组聚合后的条件,WHERE 无法直接使用聚合函数。
  3. 【回答框架 3】若表结构包含用户名列和页面名列,查询为 SELECT 用户名, COUNT(DISTINCT 页面) AS 页面数 FROM 访问表 GROUP BY 用户名 HAVING COUNT(DISTINCT 页面) > 1。
  4. 【回答框架 4】注意 COUNT(DISTINCT 列) 对 NULL 的处理,若页面列为 NULL 通常不计入,若需包含需明确业务规则。
  5. 【回答框架 5】若数据量大,可考虑在 (用户名, 页面) 上建索引提升聚合性能,但需权衡写入开销。
  6. 【关键点 1】GROUP BY 按用户分组,COUNT(DISTINCT 列) 去重统计。
  7. 【关键点 2】HAVING 用于分组后的过滤条件。
  8. 【关键点 3】输出列包含用户和统计数,可用别名。
  9. 【易错点 1】误用 WHERE 过滤聚合结果导致语法错误。
  10. 【易错点 2】忽略 DISTINCT 可能统计出重复访问次数而非页面数。
  11. 【易错点 3】对 NULL 处理不当导致统计偏差。