如何在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
相关产品推荐
相关产品推荐

