Skip to content

根据名字进行分组查询签到次数降序排列

约 415 字大约 1 分钟

SQL语法及优化美团

2025-04-14

⭐ 题目日期:

美团 - 2025/4/4

📝 题解:

要按名字分组查询签到次数并按次数降序排列,可以使用以下 SQL 语句:

SELECT name, COUNT(*) AS sign_count
FROM sign_records
GROUP BY name
ORDER BY sign_count DESC;

关键解释:

  1. GROUP BY name
    name 字段分组,将相同名字的记录归为一组。

  2. COUNT(*) AS sign_count
    统计每个分组的记录数(即签到次数),并命名为 sign_count

  3. ORDER BY sign_count DESC
    按签到次数降序排列结果。


示例数据与结果:

假设表 sign_records 数据如下:

idnamesign_time
1Alice2023-10-01
2Bob2023-10-01
3Alice2023-10-02
4Charlie2023-10-02
5Bob2023-10-03

执行 SQL 后结果:

namesign_count
Alice2
Bob2
Charlie1

注意事项:

  1. 去重统计
    如果需排除重复签到(如单日内多次签到算一次),改用 COUNT(DISTINCT DATE(sign_time))

  2. 大小写敏感
    若名字需忽略大小写(如 Johnjohn 视为同一人),改为:

    SELECT LOWER(name) AS name, COUNT(*) AS sign_count
    FROM sign_records
    GROUP BY LOWER(name)
    ORDER BY sign_count DESC;
  3. 空值处理
    如果 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条

通过上述方法即可高效实现按名字分组统计签到次数,并按次数降序排列的需求。