以下是我的数据示例:
ID | Amount
1111-1 | 5
1111-1 | -5
1111-2 | 5
1111-2 | -5
12R-1 | 8
12R-1 | -8
12R-3 | 8
12R-3 | -8
54A73-1| 2
54A73-1| -2
54A73-2| 2
54A73-2| -1
我想要做的是按破折号前面的ID列中的字符串进行分组,找到总和为零的ID组。踢球者是在我找到哪一组ID总和为零之后,我想在短划线之后添加短划线和数字。
以下是我希望解决方案的样子:
ID | Amount
1111-1 | 5
1111-1 | -5
1111-2 | 5
1111-2 | -5
12R-1 | 8
12R-1 | -8
12R-3 | 8
12R-3 | -8
请注意以54A73开头的ID不再存在,因为它们的金额总和不等于零。
非常感谢任何解决这些问题的帮助!
答案 0 :(得分:1)
使用id
和left
对locate
字段的开头部分进行分组后,将表格连接回自身的一个选项:
MySQL版本
select id, amount
from yourtable t
join (
select left(id, locate('-', id)-1) shortid
from yourtable
group by left(id, locate('-', id)-1)
having sum(amount) = 0
) t2 on left(t.id, locate('-', t.id)-1) = t2.shortid
Oracle版本
select id, amount
from yourtable t
join (
select substr(id, 0, instr(id,'-')-1) shortid
from yourtable
group by substr(id, 0, instr(id,'-')-1)
having sum(amount) = 0
) t2 on substr(t.id, 0, instr(t.id,'-')-1) = t2.shortid