MySQL SUM基于没有子查询的外键的不同行

时间:2012-06-06 12:05:43

标签: mysql sum

我有以下MySQL表,其中B_ID是指向Table_B的ID列的外键:

----------    -----------
|Table_A |    |Table_B  |
----------    -----------
|B_ID int|    |ID int   |
----------    |VALUE int|
              -----------

我想计算Table_B中VALUE列的总和,只考虑在Table_A中显示为外键的ID。另外,我想最多在Table_B中添加一行。

因此,如果表中填充了以下数据:

------    ------------
|B_ID|    |ID | VALUE|
------    ------------
|1   |    |1  | 50   |
|2   |    |2  | 100  |
|2   |    |3  | 200  |
------    ------------

总和为150(计算为50 + 100)。

我现在使用的查询是:

SELECT SUM(b.VALUE)
FROM Table_B b
WHERE b.id IN (SELECT DISTINCT B_ID FROM Table_A)

但是,如果可能的话,我想避免使用子查询。关于如何在没有子查询的情况下执行此操作的任何想法?

注意:此查询本身是较大查询中的子查询,因此它只能选择一列。

1 个答案:

答案 0 :(得分:1)

这不会消除子查询,但如果a中的记录很少而b中的记录很少,则会更有效:

SELECT  SUM(value)
FROM    (
        SELECT  DISTINCT b_id
        FROM    a
        ) a
JOIN    b
ON      b.id = a.b_id

a.b_id上创建一个索引,以便快速工作。

如果b中的记录很少,而a中有很多记录,则原始查询会更快。该指数的建议仍然适用。

相关问题
最新问题