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