You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

网站单表操作模块开发及SQL查询:获取记录最多的星期几

解决找出记录数最多星期几的SQL查询方案

嘿,看起来你已经迈出了正确的第一步——分组统计每天的课程记录数并排序,但还需要补充筛选逻辑,才能拿到所有并列记录数最多的星期几。我给你两种实用方案,适配不同的数据库场景:

方案一:子查询嵌套(兼容绝大多数数据库)

这种写法不需要依赖高级特性,几乎所有SQL数据库都能运行:

SELECT day, COUNT(*) AS cnt
FROM schedule
GROUP BY day
HAVING COUNT(*) = (
    -- 先找出所有星期几记录数中的最大值
    SELECT MAX(daily_cnt)
    FROM (
        -- 内层先统计每个星期几的课程记录数
        SELECT COUNT(*) AS daily_cnt
        FROM schedule
        GROUP BY day
    ) AS daily_counts
);

逻辑说明:

  1. 最内层子查询按day分组,算出每个星期几的课程记录数
  2. 中间子查询从这些统计结果里提取出最大的记录数
  3. 主查询筛选出记录数等于最大值的星期几和对应数量,自然会返回所有并列第一的结果

方案二:窗口函数(适合支持SQL:2003及以上的数据库,如MySQL8+、PostgreSQL、SQL Server等)

如果你的数据库支持窗口函数,这种写法更简洁优雅:

SELECT day, cnt
FROM (
    SELECT 
        day, 
        COUNT(*) AS cnt,
        -- 按记录数降序排名,并列项会得到相同排名
        RANK() OVER (ORDER BY COUNT(*) DESC) AS rank_num
    FROM schedule
    GROUP BY day
) AS ranked_days
WHERE rank_num = 1;

逻辑说明:

  1. 内层先分组统计每个星期几的记录数,同时用RANK()窗口函数给每个分组按记录数从高到低排名
  2. 外层查询直接筛选出排名为1的记录,所有并列记录数最多的星期几都会被保留

补充提示:

你原来写的ORDER BY cnt DESC只能实现排序,但如果用LIMIT 1只能拿到单个结果,没法处理多个并列最大值的情况,所以必须用上面的筛选逻辑覆盖这种场景。

内容的提问来源于stack exchange,提问作者irina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:09:49