以下 SQL 代码统计了 2022-01-01 到 2023-04-14 之间的周末订单数量,并按月份分组显示。

SELECT TO_CHAR(to_date(deliverydate, 'yyyy-mm-dd'), 'YYYY-MM') AS month,
       COUNT(*) AS count
  FROM PRESALES_HOLIDAY_ORDER
 WHERE to_date(deliverydate, 'yyyy-mm-dd') >= 
       TO_DATE('2022-01-01', 'YYYY-MM-DD')
   AND to_date(deliverydate, 'yyyy-mm-dd') < 
       TO_DATE('2023-04-14', 'YYYY-MM-DD')
   AND TO_CHAR(to_date(deliverydate, 'yyyy-mm-dd'), 'D') IN (6, 7)
 GROUP BY TO_CHAR(to_date(deliverydate, 'yyyy-mm-dd'), 'YYYY-MM')
 ORDER BY month;

代码解释:

  • TO_CHAR(to_date(deliverydate, 'yyyy-mm-dd'), 'YYYY-MM')deliverydate 列转换为日期类型,并将其格式化为 'YYYY-MM' 格式,作为月份列。
  • COUNT(*) 统计每个月份的订单数量。
  • WHERE 语句过滤了时间段在 2022-01-01 到 2023-04-14 之间的订单。
  • TO_CHAR(to_date(deliverydate, 'yyyy-mm-dd'), 'D') IN (6, 7) 筛选出周末的订单 (星期六和星期日)。
  • GROUP BY 语句按月份分组。
  • ORDER BY month 语句按月份排序。

优化建议:

  • 可以使用索引来提高查询效率,例如在 deliverydate 列上创建索引。
  • 避免使用 to_date 函数,因为它会影响查询性能。可以考虑将 deliverydate 列设置为日期类型,并在创建表时添加索引。
  • 如果需要频繁统计周末订单数量,可以考虑使用 materialized view 来提高查询速度。

注意: 以上代码仅供参考,实际应用中需要根据具体情况进行调整。


原文地址: http://www.cveoy.top/t/topic/nnLD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录