请写出一条 SQL 语句,统计每个页面路径对应的总访问次数以及去重后的访问用户数,并按照页面 ID 从低到高的顺序排列结果。
考察说明
考查对 SQL 聚合查询、分组统计和排序的掌握,重点在于独立用户数的去重处理。
回答思路
- 【回答框架 1】访问次数可通过对访问记录计数得到,使用 COUNT(*) 统计每组的记录行数。独立访问用户数需用 COUNT(DISTINCT user_id) 去重,不能直接用 COUNT(user_id),否则会重复计入同一用户的多次访问。分组键为页面路径,若页面路径可对应多个页面 ID,还需加上页面 ID 分组,确保每个路径属于明确页面。
- 【回答框架 2】分组条件写在 GROUP BY 中,按页面 ID 和页面路径分组。排序要求页面 ID 升序,使用 ORDER BY page_id ASC,若未指定 ASC 默认也是升序。结果列应包含页面 ID、页面路径、访问次数、独立用户数,命名可自定义但需清晰。
- 【回答框架 3】示例表结构假设为 page_views(page_id, path, user_id, visit_time 等)。语句为:SELECT page_id, path, COUNT(*) AS visit_count, COUNT(DISTINCT user_id) AS unique_users FROM page_views GROUP BY page_id, path ORDER BY page_id ASC。注意若一个页面 ID 对应固定路径,可只按 page_id 分组。
- 【关键点 1】COUNT(DISTINCT user_id) 实现独立用户数,避免重复计数。
- 【关键点 2】GROUP BY 包含所有非聚合列,确保语法正确。
- 【关键点 3】ORDER BY page_id ASC 满足升序要求。
- 【易错点 1】误用 COUNT(user_id) 导致多算独立用户。
- 【易错点 2】忘记分组,导致整表汇总而非逐路径统计。
- 【易错点 3】排序字段拼写错误或未包含在 GROUP BY 中,引发 SQL 执行错误。