select sum(val) from ( select distinct val from a表 ) t
我的a表结构是 id vala xxx 1 2 c 2 3 b 4 4 b 5 5 bb表是 id valb toaid yyy 1 11 1 2 22 1 3 3 4 4 4 2 5 6 2根据a表xxx字段 得到valb的和 和vala的值。比如 c valb的值和vala的值 分别等于 33 和 2 b 分别等于 13 和 12
自己搞定了。原来 sum(distinct a.vala) 就行了,还是衷心感谢各位
mysql> select a.xxx,sum(distinct a.vala) vala,sum(b.valb) valb from a left join b on a.id=b.toaid group by a.xxx; +------+------+------+ | xxx | vala | valb | +------+------+------+ | b | 12 | 13 | | c | 2 | 33 | +------+------+------+ 2 rows in set (0.01 sec)
参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
不会出现这种情况如果id为5 那么 val只会等于2,是根据其他同一个记录得到的。
id3,和id4 是根据其他表的两个记录得到的。我用
sum(if(val=val,val /count(val) ,val)) as resm 这个结果是不对的。 我的想法是 如果两行的val字段相等,其实就不操作,不同才会相加
from (
select distinct val from a表
) t
id vala xxx
1 2 c
2 3 b
4 4 b
5 5 bb表是
id valb toaid yyy
1 11 1
2 22 1
3 3 4
4 4 2
5 6 2根据a表xxx字段 得到valb的和 和vala的值。比如
c valb的值和vala的值 分别等于 33 和 2
b 分别等于 13 和 12
+------+------+------+
| xxx | vala | valb |
+------+------+------+
| b | 12 | 13 |
| c | 2 | 33 |
+------+------+------+
2 rows in set (0.01 sec)