场景是DD是存款详细信息,具有自己的ID,D是实际存款。细节包括对存款进行的活动。
|-------------|-----------|--------------|--------------|
| DD | D | AMOUNT | MEMBER |
|-------------|-----------|--------------|--------------|
| 1 | 1 | 1500.00 | 2 |
|-------------|-----------|--------------|--------------|
| 2 | 1 | -1500.00 | 2 |
|-------------|-----------|--------------|--------------|
| 3 | 1 | 350.00 | 4 |
|-------------|-----------|--------------|--------------|
| 4 | 2 | 1000.00 | 5 |
|-------------|-----------|--------------|--------------|
| 5 | 2 | -1000.00 | 5 |
|-------------|-----------|--------------|--------------|
| 6 | 3 | 100.00 | 5 |
|-------------|-----------|--------------|--------------|
| 7 | 3 | -10.00 | 5 |
|-------------|-----------|--------------|--------------|
目标是仅获取第3行,因为它具有不平衡金额的详细信息。我的查询版本要排除均衡金额
SELECT dd,d,amount,SUM(amount) FROM test
group by dd
having sum(amount)>0
它似乎无法正常工作。 SQL Fiddle也失败了所以我无法给出一个正确的例子。我找到了DB Fiddle,但上面的示例似乎并没有在那里执行。
也可以有人告诉这是什么类型的查询吗?
修改
预期产出:
|-------------|-----------|--------------|--------------|
| DD | D | AMOUNT | MEMBER |
|-------------|-----------|--------------|--------------|
| 1 | 1 | 1500.00 | 2 |
|-------------|-----------|--------------|--------------|
| 2 | 1 | -1500.00 | 2 |
|-------------|-----------|--------------|--------------|
| 3 | 1 | 350.00 | 4 |
|-------------|-----------|--------------|--------------|
| 6 | 3 | 100.00 | 5 |
|-------------|-----------|--------------|--------------|
| 7 | 3 | -10.00 | 5 |
|-------------|-----------|--------------|--------------|
答案 0 :(得分:2)
尝试此查询:
select * from tbl
where d in (
select d from tbl
group by d
having sum(amount) <> 0
);
子查询将仅返回不平衡的D
,外部查询将根据子查询的结果过滤掉平衡的D
。