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

如何编写SQL查询语句显示预约请求最少的星期几?

统计一周中预约请求最少的星期几的查询语句

核心思路

先按星期几分组统计预约数量,再筛选出数量最少的星期几(支持并列情况)。以下是基于Oracle数据库的实现方案(从你的表结构和日期格式判断为Oracle):

基础统计查询(查看各星期几的预约数)

SELECT
    TRIM(TO_CHAR(A_DATE_TI, 'DAY')) AS 星期几,
    COUNT(APP_ID) AS 预约数量
FROM APPOINTMENT
GROUP BY TRIM(TO_CHAR(A_DATE_TI, 'DAY'))
ORDER BY 预约数量 ASC;
  • 使用TRIM是因为TO_CHAR(A_DATE_TI, 'DAY')返回的星期名称默认带尾部空格,需要去除。
  • 这条语句会按预约数量升序展示所有星期几的预约统计结果。

获取预约最少的星期几(支持并列)

如果存在多个星期几预约数相同且均为最少,用窗口函数RANK()可以一次性返回所有符合条件的记录:

SELECT 星期几, 预约数量
FROM (
    SELECT
        TRIM(TO_CHAR(A_DATE_TI, 'DAY')) AS 星期几,
        COUNT(APP_ID) AS 预约数量,
        RANK() OVER (ORDER BY COUNT(APP_ID) ASC) AS 排名
    FROM APPOINTMENT
    GROUP BY TRIM(TO_CHAR(A_DATE_TI, 'DAY'))
)
WHERE 排名 = 1;
  • 内层查询:分组统计每个星期几的预约数,同时按预约数升序排名,数量最少的记录排名为1。
  • 外层查询:筛选出排名为1的记录,确保所有并列最少的星期几都能被返回。

显示中文星期名称(可选)

如果需要显示中文的星期名称(如「星期一」),可以指定日期语言参数:

SELECT 星期几, 预约数量
FROM (
    SELECT
        TRIM(TO_CHAR(A_DATE_TI, 'DAY', 'NLS_DATE_LANGUAGE = SIMPLIFIED CHINESE')) AS 星期几,
        COUNT(APP_ID) AS 预约数量,
        RANK() OVER (ORDER BY COUNT(APP_ID) ASC) AS 排名
    FROM APPOINTMENT
    GROUP BY TRIM(TO_CHAR(A_DATE_TI, 'DAY', 'NLS_DATE_LANGUAGE = SIMPLIFIED CHINESE'))
)
WHERE 排名 = 1;

针对样本数据的返回结果

根据你提供的样本数据,统计后预约最少的是周日、周六、周三,各1条预约,上述查询会返回这三条记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:35:28