MySQL按日期分组:区分NULL与非NULL数据统计
按日期字段是否为空分组统计数量
原始数据表
| id | date |
|---|---|
| 1 | 2023-06-05 08:00:00.000 |
| 2 | 2023-06-05 13:00:00.000 |
| 3 | 2023-06-06 08:00:00.000 |
| 4 | null |
| 5 | 2023-06-05 08:00:00.000 |
| 6 | null |
需求说明
需按date字段是否为null进行分组统计,得出非空数据和空数据的数量,目标结果如下:
目标统计结果
| count(date) | date |
|---|---|
| 4 | NOT_NULL_DATA |
| 2 | NULL_DATA |
实现方案
通用SQL写法(适配多数数据库)
通过CASE WHEN语句将非空和空的date字段映射为指定字符串,再按该字符串分组统计:
SELECT COUNT(*) AS `count(date)`, CASE WHEN date IS NOT NULL THEN 'NOT_NULL_DATA' ELSE 'NULL_DATA' END AS date FROM your_table_name GROUP BY CASE WHEN date IS NOT NULL THEN 'NOT_NULL_DATA' ELSE 'NULL_DATA' END;
MySQL简化写法
利用MySQL内置IF函数简化逻辑:
SELECT COUNT(*) AS `count(date)`, IF(date IS NOT NULL, 'NOT_NULL_DATA', 'NULL_DATA') AS date FROM your_table_name GROUP BY IF(date IS NOT NULL, 'NOT_NULL_DATA', 'NULL_DATA');
注意:若直接使用
COUNT(date),空值组的统计结果会显示为0,与目标结果不符,因此使用COUNT(*)统计每组总条数更准确。
内容的提问来源于stack exchange,提问作者rime
相关产品推荐
相关产品推荐

