我有这个表:
id value ref
1 0 10000
2 5 11000
3 5 11100
4 2 11101
5 2 11102
6 10 12000
... ... ....
我该如何做到这一点:
ref sum(value)
10000 14 <-- 5 + 5 + 2 + 2
11000 9 <-- 5 + 2 + 2
11100 4 <-- 2 + 2
12000 10 <-- and so on
我不能确定这个设计是否有效,它不会工作,或者我错过了什么。
我没有任何sql查询给你们看。
使用正则表达式,也许?我读过这方面的书,但不完全理解。
如有任何帮助,不胜感激
在用表的真实名称替换contentsum
之后,这可能对您有用:
select rpad(main.prefix, 5, 0) as ref, sum(contentsum.value) as total
from (select distinct trim(trailing '0' from ref) as prefix from contentsum) as main
join contentsum on contentsum.ref like concat(main.prefix, '%')
group by main.prefix
;
然而,它的总数与你的不匹配。相反,它们与我第一次读到问题时你所加的数字相符。
基本上,关键是将表连接到ref
值的某个函数上,按左侧分组,并对右侧求和。子查询压缩相同的行并减少一些代码重复,但如果ref
值都是唯一的,则不是严格必要的。