我有这张桌子:
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查询向你们展示。
使用正则表达式,也许?我读过它,但不完全明白。
非常感谢任何帮助
答案 0 :(得分:0)
在用表的真实姓名替换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
值都是唯一的,则不是绝对必要的。