从查询中获取不平衡的行



场景是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      |
|-------------|-----------|--------------|--------------|

尝试以下查询:

select * from tbl
where d in (
select d from tbl
group by d
having sum(amount) <> 0
);

子查询将仅返回不平衡的D,外部查询将根据子查询的结果过滤掉平衡的D

最新更新