使用GROUP BY合并查询记录:统计检查完成与缺失情况
使用GROUP BY合并查询记录的SQL实现
需求说明
基于包含UID_MOTRIP、UID_PERSON、UID_INSPECTION字段的表,生成单条汇总记录,包含以下字段:
UID_MOTRIP:取该字段的最大值InspectionCount:统计UID_INSPECTION > 0的记录数(已完成检查的数量)InspectionMissingCount:统计UID_INSPECTION = 0的记录数(未完成检查的数量)
实现SQL
SELECT MAX(UID_MOTRIP) AS UID_MOTRIP, COUNT(CASE WHEN UID_INSPECTION > 0 THEN 1 END) AS InspectionCount, COUNT(CASE WHEN UID_INSPECTION = 0 THEN 1 END) AS InspectionMissingCount FROM your_table_name GROUP BY 1;
代码说明
MAX(UID_MOTRIP):提取所有记录中UID_MOTRIP的最大值COUNT(CASE WHEN UID_INSPECTION > 0 THEN 1 END):仅对UID_INSPECTION大于0的记录计数,不满足条件的CASE返回NULL,COUNT函数会自动忽略NULL值COUNT(CASE WHEN UID_INSPECTION = 0 THEN 1 END):同理统计未完成检查的记录数GROUP BY 1:通过常量分组,确保无论源表行数多少,都生成单条汇总结果
示例验证
代入给定的示例数据:
| UID_MOTRIP | UID_PERSON | UID_INSPECTION |
|---|---|---|
| 413 | 14 | 77 |
| 411 | 17 | 0 |
| 407 | 16 | 74 |
执行SQL后得到结果:
| UID_MOTRIP | InspectionCount | InspectionMissingCount |
|---|---|---|
| 413 | 2 | 1 |
内容的提问来源于stack exchange,提问作者John D
相关产品推荐
相关产品推荐

