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

如何在MySQL中筛选并统计时间列中的AM和PM时段数据?

统计MySQL列中AM/PM记录数量的解决方案

你可以通过SUM()结合CASE WHEN语句实现需求,正确的SQL写法如下:

SELECT
  SUM(CASE WHEN start_booking_time LIKE '%AM%' THEN 1 ELSE 0 END) AS am_count,
  SUM(CASE WHEN start_booking_time LIKE '%PM%' THEN 1 ELSE 0 END) AS pm_count
FROM your_table_name;

说明

你之前的写法存在问题:COUNT(id)会统计所有非NULL的id值,无论CASE WHEN的条件是否满足,因此返回的会是全表的记录数,而非符合条件的数量。改用SUM()后,符合条件的记录会被计为1,不符合的计为0,累加后就能得到对应条件的记录总数。

另外还有一种基于COUNT()的写法,原理是利用COUNT()忽略NULL值的特性:

SELECT
  COUNT(CASE WHEN start_booking_time LIKE '%AM%' THEN id END) AS am_count,
  COUNT(CASE WHEN start_booking_time LIKE '%PM%' THEN id END) AS pm_count
FROM your_table_name;

当条件不满足时,CASE返回NULL,COUNT()会自动跳过这些NULL值,最终只统计符合条件的记录数。

内容的提问来源于stack exchange,提问作者Mohammad Al Mashwakhi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:40:41