多连接与分组汇总统计:人行道检查系统单查询实现
人行道检查系统的SQL查询实现
首先我得先假设你的数据表结构(毕竟没给具体表结构,我先按常见的场景来),假设你的表名叫sidewalk_inspections,包含以下核心字段:
inspection_id:唯一标识每次检查的ID(用来分组“每次检查”)defect_length:单条缺陷的长度(如果每次检查可能有多个缺陷记录,就需要求和;如果每条检查只有一条缺陷记录,直接取字段值即可)observation_type:观测类型(比如你提到的'a')observation_length:单条观测的长度
基于这个结构,我们可以用条件聚合来一次性完成三个计算需求,SQL语句如下:
SELECT inspection_id, -- 1. 每次检查的缺陷总长度:如果单条检查对应多条缺陷,用SUM求和;如果单条检查只有一条缺陷,直接写defect_length即可 SUM(defect_length) AS total_defect_length, -- 2. 观测类型为'a'的每次检查观测总长度:用CASE筛选类型后求和 SUM(CASE WHEN observation_type = 'a' THEN observation_length ELSE 0 END) AS type_a_observation_length, -- 3. 不区分类型的每次检查观测总长度:直接求和所有观测长度 SUM(observation_length) AS total_observation_length FROM sidewalk_inspections GROUP BY inspection_id;
关键部分解释:
- GROUP BY inspection_id:这是核心,确保我们的计算都是基于“每次检查”来聚合的
- 条件聚合(CASE + SUM):用来精准筛选出类型为'a'的观测记录,只对这类记录的长度求和,其他类型的贡献记为0,这样就得到了特定类型的总长度
- SUM(defect_length):如果你的表中每次检查只有一条缺陷记录,把SUM去掉直接写
defect_length AS total_defect_length就行
如果你的表结构和我假设的不一样(比如缺陷和观测存在不同表),可以根据实际情况调整关联逻辑,但核心思路还是用分组+条件聚合来实现多维度的统计。
内容的提问来源于stack exchange,提问作者User1974
相关产品推荐
相关产品推荐

