将一行与多行进行比较后对行进行求和

时间:2015-06-23 05:12:48

标签: mysql

我有两个表格ab。我想将number中的a与共享ID的number中的b进行比较。 a只有一行,而b有多行。如果b的总和小于a,那么a的那一行应该添加到总和中,否则应该跳过它。

Table a
ID  Number
4   50
5   60
6   70

Table b
ID  Number  SharedID
1   30      4
2   25      4
3   50      5
4   5       5
5   30      6
6   10      6

使用该示例:b 1和2大于4,因此不会计算。 b 3和4小于5因此它会计数。 b 5和6小于6,所以它会计数。总数应为130。

我在将一行与多行进行比较时遇到问题,然后只对一些数字进行求和。

3 个答案:

答案 0 :(得分:2)

尝试此查询:

SELECT SUM(a.Number)
FROM a INNER JOIN
(
    SELECT b.SharedID, SUM(b.Number) AS theSum
    FROM b
    GROUP BY b.SharedID
) t
ON a.ID = t.SharedID
WHERE t.theSum < a.Number

概念上最简单的选择是创建一个包含表b总和的临时表,然后创建一个返回表a的JOINWHERE子句将您的总数限制为仅大于b总和的Number个值。

答案 1 :(得分:2)

这应该做的工作:

select sum(Number)
from a
where Number > (select sum(Number) from b where b.SharedID = a.ID)

答案 2 :(得分:0)

agrep("abteam",c("acb","abd","ab"),value=T,ignore.case = TRUE,max = list(del = 10, ins = 10, sub = 10))

这应该可以解决问题