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

SQL新手求助:查询特定月份下单量最多的门店ID

查询指定月份下单量最多的门店ID解决方案

嘿,作为SQL新手能想到尝试子查询已经超棒啦!咱们先看看你原语句里的小问题,再一步步补全出正确的查询语句~

原语句的问题点

  • 子查询没有正确闭合,缺少必要的括号和逻辑分隔符
  • 没有对每个门店的下单量进行计数统计,只是筛选了日期范围
  • 末尾的SELECT DISTINCT store属于语法错误,完全不符合当前需求逻辑

分步实现正确查询

我们的核心思路是:先统计每个门店在指定月份的下单次数,再找出下单次数最多的门店(还要考虑多个门店并列第一的情况)。

第一步:统计指定月份各门店的下单量

先写基础的统计语句,用COUNT(*)统计每个门店的下单数,GROUP BY store_id把同门店的记录分组:

SELECT store_id, COUNT(*) AS order_count
FROM purchase
WHERE purchase_date >= '2021-04-01' AND purchase_date <= '2021-04-30'
GROUP BY store_id;

第二步:获取下单量最多的门店

这里分两种场景处理:

场景1:只取一个门店(不考虑并列第一的情况)

把第一步的统计结果作为子查询,按下单量降序排序后取第一行:

SELECT store_id
FROM (
    SELECT store_id, COUNT(*) AS order_count
    FROM purchase
    WHERE purchase_date >= '2021-04-01' AND purchase_date <= '2021-04-30'
    GROUP BY store_id
) AS store_orders
ORDER BY order_count DESC
LIMIT 1;
场景2:取所有下单量并列第一的门店(更严谨的场景)

如果存在多个门店下单量相同且都是最多的,我们用窗口函数来获取最大值并筛选:

SELECT store_id
FROM (
    SELECT store_id, COUNT(*) AS order_count,
           -- 计算所有门店中的最大下单量
           MAX(COUNT(*)) OVER () AS max_order_count
    FROM purchase
    WHERE purchase_date >= '2021-04-01' AND purchase_date <= '2021-04-30'
    GROUP BY store_id
) AS store_orders
WHERE order_count = max_order_count;

优化:让月份指定更灵活

如果不想每次手动写当月的起止日期,可以用数据库自带的日期函数来简化:

  • MySQL/MariaDB:
SELECT store_id, COUNT(*) AS order_count
FROM purchase
WHERE YEAR(purchase_date) = 2021 AND MONTH(purchase_date) = 4
GROUP BY store_id;
  • PostgreSQL:
SELECT store_id, COUNT(*) AS order_count
FROM purchase
WHERE DATE_TRUNC('month', purchase_date) = '2021-04-01'
GROUP BY store_id;
  • SQL Server:
SELECT store_id, COUNT(*) AS order_count
FROM purchase
WHERE DATEPART(YEAR, purchase_date) = 2021 AND DATEPART(MONTH, purchase_date) = 4
GROUP BY store_id;

这样只要修改年份和月份数值,就能快速切换查询的月份啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 12:42:28