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

跨多表计算匹配行乘积之和的SQL实现及JOIN优化方案

问题描述

我有一段伪SQL查询,用来展示想要实现的逻辑:

SELECT 
    t3.ColA, t3.ColB 
FROM 
    t3 
WHERE 
    t3.ColA IN (SELECT t2.ColA, t2.ColC 
                FROM t2 
                WHERE t2.ColD IN (SELECT DISTINCT t1.ColD 
                                  FROM t1 
                                  WHERE t1.ColE = '1234'));

现在我希望获取SUM(ColB * ColC)的结果,仅当t2.ColA = t3.ColA时才进行相乘计算。另外我知道用JOIN改写会更高效,但刚接触SQL对JOIN不太熟悉,希望得到帮助。

示例表结构及数据

t1表

ColDColE
271234
325678
469624

t2表

ColAColCColD
12345127
26743227
43621327
12345246
26743552

t3表

ColAColB
123455
2674310
436213

当查询条件为ColE='1234'时,预期输出为34——从t1筛选出ColD='27',选中t2前3行和t3前3行,计算sum(5*1, 10*2, 3*3)=34。

解决方案

用JOIN实现(推荐)

JOIN是SQL中关联多张表的常用方式,这里依次关联t1、t2、t3,筛选条件后计算总和:

SELECT SUM(t3.ColB * t2.ColC) AS total_sum
FROM t1
JOIN t2 ON t1.ColD = t2.ColD
JOIN t3 ON t2.ColA = t3.ColA
WHERE t1.ColE = '1234';

逻辑说明:

  1. JOIN t2 ON t1.ColD = t2.ColD:将t1和t2通过ColD关联,筛选出t1中ColE='1234'对应的t2数据;
  2. JOIN t3 ON t2.ColA = t3.ColA:将关联后的结果与t3通过ColA关联,确保只有t2和t3中ColA匹配的行参与计算;
  3. SUM(t3.ColB * t2.ColC):对匹配行的ColB*ColC结果求和,得到最终数值。

用子查询实现(贴合原思路)

如果暂时不习惯JOIN,可基于原伪SQL思路修改(注意原伪SQL中IN子查询返回两列是错误的,需调整):

SELECT SUM(t3.ColB * t2.ColC) AS total_sum
FROM t3
JOIN t2 ON t3.ColA = t2.ColA
WHERE t2.ColD IN (
    SELECT DISTINCT t1.ColD
    FROM t1
    WHERE t1.ColE = '1234'
);

或者用嵌套子查询的方式:

SELECT SUM(ColB * ColC) AS total_sum
FROM (
    SELECT t3.ColB, t2.ColC
    FROM t3
    JOIN t2 ON t3.ColA = t2.ColA
    WHERE t2.ColD IN (
        SELECT DISTINCT t1.ColD
        FROM t1
        WHERE t1.ColE = '1234'
    )
) AS temp_table;

验证结果

用示例数据执行上述查询,都会得到预期的34,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 02:35:13