如何合并MySQL查询:同时获取项目总数与订阅者总订阅额
合并无关联表的统计查询
由于两张表没有关联关系,我们可以通过标量子查询或**交叉连接(CROSS JOIN)**将项目总数与订阅者的金额统计结果合并到同一份查询中,以下是两种可行方案:
方案1:使用标量子查询(简洁写法)
直接在SELECT列表中嵌入项目总数的统计子查询,每一行订阅者数据都会带上固定的项目总数:
SELECT COD_ASSINANTE, SUM(VALOR_TOTAL_ASSIN) AS VLR_TOT, (SELECT COUNT(COD_PROJETO) FROM DIM_PROJETOS) AS QTD_PROJETOS FROM TAB_ASSINATURAS GROUP BY COD_ASSINANTE;
方案2:使用交叉连接(逻辑清晰写法)
先分别生成两个独立的统计结果集,再通过交叉连接合并:
SELECT ta.COD_ASSINANTE, ta.VLR_TOT, dp.QTD_PROJETOS FROM ( -- 先统计每个订阅者的总金额 SELECT COD_ASSINANTE, SUM(VALOR_TOTAL_ASSIN) AS VLR_TOT FROM TAB_ASSINATURAS GROUP BY COD_ASSINANTE ) ta -- 交叉连接项目总数的统计结果 CROSS JOIN ( SELECT COUNT(COD_PROJETO) AS QTD_PROJETOS FROM DIM_PROJETOS ) dp;
测试结果验证
用你提供的示例数据执行上述查询,会得到如下结果:
| COD_ASSINANTE | VLR_TOT | QTD_PROJETOS |
|---|---|---|
| 1001 | 519.58 | 6 |
| 1002 | 593.32 | 6 |
| 1003 | 508.67 | 6 |
| 1004 | 216 | 6 |
方案说明
- 标量子查询写法更紧凑,MySQL会自动优化这个固定值的子查询,实际仅执行一次。
- 交叉连接写法逻辑更直观,适合后续需要添加更多独立统计维度的场景。
内容的提问来源于stack exchange,提问作者Akira
相关产品推荐
相关产品推荐

