如何在自连接中使用 group by

阿延布尼亚

我有这样的桌子

  • Acc、金额、x、名称、时间
  • 1, 100, dep, bbb, 10
  • 1, 200, dep, bbb, 10
  • 1, 80, 机智, bbb, 10
  • 1, 90, 机智, bbb, 10
  • 2, 100, dep, bbb, 20
  • 2, 101, 机智, bbb, 20
  • 1、100、dep、ccc、10
  • 1, 150, 机智, ccc, 10

从这里我想显示一个表格

  • 名称、ACC、时间、dep_amt、wid_amt、利润
  • bbb, 1, 10, 300, 170, 130
  • bbb, 2, 20, 100, 101, -1
  • ccc, 1, 10, 100, 150, -50

所以,我试过自我加入

SELECT a.Name, a.Acc, a.Time, a.Amount as dep_amt, new.Amount as wid_amt, (a.Amount-new.Amount) as profit
FROM all_data as a, all_data as new
where a.Time = new.Time
and a.name = new.name
and a.acc =new.acc
and a.x= "dep”
and new.x="wit"

但是,我不能使用 Group by(error contains nonaggregated column) 和这个 sql 结果一个包含多行的表。怎么做???

戈登·利诺夫

这看起来像条件​​聚合,而不是自联接:

select Name, Acc, Time,
       sum(case when x = 'dep' then amount else 0 end) as dep_amt,
       sum(case when x = 'wit' then amount else 0 end) as wit_amt,
       sum(case when x = 'dep' then amount 
                when x = 'wit' then - amount
                else 0
           end) as profit
from t
group by Name, Acc, Time;

是一个 db<>fiddle。

自联接不起作用,因为每个组中有多个“dep”和“wit”行。在每个组中,您会得到这些行的笛卡尔积,从而导致总计算中出现错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章