请写出一条 SQL 语句,找出访问次数大于 2 的用户,并列出这些用户的用户名及对应的总访问次数。
考察说明
考查使用 GROUP BY 与 HAVING 进行分组过滤的 SQL 查询能力。
回答思路
- 【回答框架 1】先明确查询目标:需要输出用户名和访问次数,且仅保留访问次数超过 2 的组。访问次数通过对访问记录表按用户分组后计数获得。
- 【回答框架 2】使用 GROUP BY 按用户名字段分组,配合 COUNT(*) 计算每个用户的访问次数,再用 HAVING 子句过滤 COUNT(*) > 2 的组。注意 WHERE 与 HAVING 的差异,WHERE 用于分组前过滤行,HAVING 用于分组后过滤组。
- 【回答框架 3】最终 SELECT 选择用户名字段和 COUNT(*) 作为访问次数,并按用户分组。若访问记录表中存在重复的同一用户访问记录,计数时需确认业务上是否需去重,通常每行代表一次访问。
- 【回答框架 4】如果需要保证结果稳定性,可对访问次数或用户名进行排序,但本题未明确要求排序,可选择性添加 ORDER BY 访问次数 DESC。
- 【回答框架 5】提供完整 SQL 示例:SELECT user_name, COUNT(*) AS visit_count FROM user_access_log GROUP BY user_name HAVING COUNT(*) > 2; 注意表名与字段名需根据实际数据库结构调整。
- 【关键点 1】使用 GROUP BY 与 HAVING 组合实现按条件过滤分组结果
- 【关键点 2】COUNT(*) 计算每组的行数,即访问次数
- 【关键点 3】WHERE 不能用于过滤聚合函数结果,必须用 HAVING
- 【易错点 1】误将 HAVING 写成 WHERE,导致语法错误或逻辑错误
- 【易错点 2】未对用户名字段去重,若表中同一用户有重复行,计数可能不准确