外观
根据名字进行分组查询签到次数降序排列
⭐ 题目日期:
美团 - 2025/4/4
📝 题解:
要按名字分组查询签到次数并按次数降序排列,可以使用以下 SQL 语句:
SELECT name, COUNT(*) AS sign_count
FROM sign_records
GROUP BY name
ORDER BY sign_count DESC;
关键解释:
GROUP BY name
按name
字段分组,将相同名字的记录归为一组。COUNT(*) AS sign_count
统计每个分组的记录数(即签到次数),并命名为sign_count
。ORDER BY sign_count DESC
按签到次数降序排列结果。
示例数据与结果:
假设表 sign_records
数据如下:
id | name | sign_time |
---|---|---|
1 | Alice | 2023-10-01 |
2 | Bob | 2023-10-01 |
3 | Alice | 2023-10-02 |
4 | Charlie | 2023-10-02 |
5 | Bob | 2023-10-03 |
执行 SQL 后结果:
name | sign_count |
---|---|
Alice | 2 |
Bob | 2 |
Charlie | 1 |
注意事项:
去重统计
如果需排除重复签到(如单日内多次签到算一次),改用COUNT(DISTINCT DATE(sign_time))
。大小写敏感
若名字需忽略大小写(如John
和john
视为同一人),改为:SELECT LOWER(name) AS name, COUNT(*) AS sign_count FROM sign_records GROUP BY LOWER(name) ORDER BY sign_count DESC;
空值处理
如果name
可能为NULL
,需用WHERE name IS NOT NULL
过滤。
扩展:性能优化
- 索引优化:在
name
字段添加索引,加速分组查询:CREATE INDEX idx_name ON sign_records(name);
- 分页查询:若数据量大,添加
LIMIT
分页:SELECT name, COUNT(*) AS sign_count FROM sign_records GROUP BY name ORDER BY sign_count DESC LIMIT 10 OFFSET 0; -- 取前10条
通过上述方法即可高效实现按名字分组统计签到次数,并按次数降序排列的需求。