You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将两个关联Parceles表的统计SELECT查询合并为单一查询

合并两个统计查询为单一结果集的解决方案

要把这两个独立的统计查询合并成包含REFCAT、INFORMACIO、CEDULES三列的结果集,有两种直观且高效的方法,我给你详细说明:

方法一:使用LEFT JOIN关联子查询

这种方法的思路是先分别完成两个统计(作为子查询),再以parceles表的REFCAT为基准,把两个统计结果关联起来。用LEFT JOIN可以保证即使某个REFCAT在其中一个表没有对应数据,也能保留该REFCAT并显示0值。

SELECT 
    p.REFCAT,
    COALESCE(i_count.Informacio, 0) AS INFORMACIO,
    COALESCE(c_count.CEDULES, 0) AS CEDULES
FROM parceles p
LEFT JOIN (
    SELECT 
        i.fid_parceles,
        COUNT(i.Ref_cadastral) AS Informacio
    FROM informacio i
    GROUP BY i.fid_parceles
) i_count ON p.fid = i_count.fid_parceles
LEFT JOIN (
    SELECT 
        c.fid_parceles,
        COUNT(c.Ref_cadastral) AS CEDULES
    FROM cedules c
    GROUP BY c.fid_parceles
) c_count ON p.fid = c_count.fid_parceles
ORDER BY INFORMACIO DESC, CEDULES DESC;

说明:

  • 两个子查询分别统计每个fid_parceles对应的行数,避免重复关联parceles表,提升效率
  • COALESCE函数用来把NULL值(即没有对应数据的情况)替换为0,结果更规整
  • 最后可以根据需求调整排序规则

方法二:使用UNION ALL合并后聚合

如果你的数据量较大,这种方法可能更高效——先把两个表的关联数据合并,再一次性统计数量:

SELECT 
    p.REFCAT,
    SUM(CASE WHEN source = 'informacio' THEN 1 ELSE 0 END) AS INFORMACIO,
    SUM(CASE WHEN source = 'cedules' THEN 1 ELSE 0 END) AS CEDULES
FROM parceles p
LEFT JOIN (
    SELECT fid_parceles, 'informacio' AS source FROM informacio
    UNION ALL
    SELECT fid_parceles, 'cedules' AS source FROM cedules
) combined ON p.fid = combined.fid_parceles
GROUP BY p.REFCAT
ORDER BY INFORMACIO DESC, CEDULES DESC;

说明:

  • UNION ALL把informacio和cedules的fid_parceles数据合并,同时标记来源表
  • 外层用SUM(CASE...)分别统计来自两个表的行数
  • 这种方式只需要关联parceles表一次,在数据量较大时性能更优

两种方法都能得到你需要的REFCAT | INFORMACIO | CEDULES格式结果,你可以根据自己的数据库环境和数据规模选择合适的方案。

内容的提问来源于stack exchange,提问作者kestrelol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 21:42:37