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

如何使用MySQL统计每小时的订单数量?

按小时统计订单总数的正确SQL写法

你当前使用的窗口函数COUNT() OVER (PARTITION BY order_time)会为每一行数据计算其对应的order_time分组内的订单数,因此会逐行展示重复的统计结果,而非按小时合并汇总。

要实现按小时统计订单总数,需要先将order_time截断到小时级别,再通过GROUP BY分组聚合统计,以下是不同数据库环境下的实现示例:

PostgreSQL/Redshift

SELECT DATE_TRUNC('hour', order_time) AS order_hour,
       COUNT(order_id) AS num_orders
FROM pizza_runner.customer_orders
GROUP BY DATE_TRUNC('hour', order_time)
ORDER BY order_hour;

MySQL

SELECT DATE_FORMAT(order_time, '%Y-%m-%d %H:00:00') AS order_hour,
       COUNT(order_id) AS num_orders
FROM pizza_runner.customer_orders
GROUP BY DATE_FORMAT(order_time, '%Y-%m-%d %H:00:00')
ORDER BY order_hour;

SQL Server

SELECT DATEADD(HOUR, DATEDIFF(HOUR, 0, order_time), 0) AS order_hour,
       COUNT(order_id) AS num_orders
FROM pizza_runner.customer_orders
GROUP BY DATEADD(HOUR, DATEDIFF(HOUR, 0, order_time), 0)
ORDER BY order_hour;

说明

  • DATE_TRUNC/DATE_FORMAT/DATEADD+DATEDIFF的作用是将order_time统一转换为对应小时的起始时间(比如2023-01-01 18:15:30会转为2023-01-01 18:00:00),确保同一小时内的订单被归为一组。
  • GROUP BY按处理后的小时时间分组,COUNT(order_id)统计每组内的订单数量,最终得到每个小时的订单总数。
  • 添加ORDER BY order_hour可以让结果按时间顺序排列,更易查看。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:11:12