我有两个表tableA和tableB。
tableA
-------
ID sid amount
1 swerdd 20
2 swerdd 30
3 fdff 40
tableB
------
new_id token date
10 swerdd 2014 -10-12
11 swerdd 2014 -10-13
12 swerdd 2014 -10-13
现在我使用查询
SELECT * FROM tableA JOIN tableB on tableA.sid = tableB.token
给出了多行,所以我的其他查询
SELECT SUM(amount) FROM tableA JOIN tableB on tableA.sid = tableB.token
给出了错误的结果。如何选择DISTINCT SUM?
编辑:事情是我在这里有很多关系,因为sid和令牌正在重复。所以简而言之,问题是我如何计算多对多连接中的不同总和
答案 0 :(得分:1)
一些不涉及加入操作的方法......
EXISTS
谓语......
SELECT SUM(a.reward_amount)
FROM tableA a
WHERE EXISTS (SELECT 1 FROM tableB b WHERE b.token = a.sid)
IN (subquery)
谓语......
SELECT SUM(a.reward_amount)
FROM tableA a
WHERE a.sid IN (SELECT b.token FROM tableB b)
对于连接操作,一个选项是使用内联视图来获取令牌的不同列表...
SELECT SUM(a.reward_amount)
FROM tableA a
JOIN ( SELECT b.token
FROM tableB b
GROUP BY b.token
) c
ON c.token = a.sid
答案 1 :(得分:0)
要获得不同的金额,您可以使用以下查询
SELECT reward_amount
FROM tableA
JOIN tableB on tableA.sid = tableB.token
GROUP BY reward_amount;
答案 2 :(得分:-1)
为了在一组记录上执行aggegations(SUM,COUNT,AVG,...),您需要一个GROUP BY
子句。
SELECT SUM(amount)
FROM tableA
WHERE sid IN (SELECT token FROM tableB)
GROUP BY sid
如果您有兴趣深化有关数据分组的SQL知识,可以查看:http://www.techonthenet.com/sql/group_by.php