SQL内连接查询中为每行统计对应办事处设备总数量的实现问题
解决方案
你可以通过新增聚合子查询统计每个办事处的设备总量,再关联到原有查询上即可实现需求,修改后的完整SQL如下:
SELECT realiza_soli.*, oficina.id_lugar, oficina.desc_lugar, tipo_equipamiento.nom_tipo, COALESCE(equip_count.total, 0) AS total_equip FROM realiza_soli INNER JOIN usuario ON realiza_soli.fk_user = usuario.id_user INNER JOIN tipo_equipamiento ON realiza_soli.fk_tipo = tipo_equipamiento.id_tipo INNER JOIN oficina ON usuario.fk_ofic = oficina.id_lugar AND realiza_soli.estado_soli = 'Pendiente Info' -- 关联预统计的各办事处设备总量 LEFT JOIN ( SELECT fk_ofic, COUNT(*) AS total FROM equipamiento WHERE fk_ofic IS NOT NULL GROUP BY fk_ofic ) AS equip_count ON oficina.id_lugar = equip_count.fk_ofic ORDER BY realiza_soli.id_soli ASC;
实现逻辑说明
- 先通过子查询对
equipamiento表按fk_ofic分组,统计每个关联的办事处下的设备总数,避免直接关联设备表导致原有请求行重复 - 用
LEFT JOIN关联统计结果,保证没有设备的办事处(如示例中的Oficina 10)也能保留原有行不会被过滤 - 用
COALESCE函数将无设备的办事处的统计空值转为0,匹配你的预期输出要求
内容的提问来源于stack exchange,提问作者GLPG35
相关产品推荐
相关产品推荐

