如何在pandas中的postgresql中对多个表进行聚合和分组

问题描述 投票:0回答:1

我在postgresql中遇到了一些麻烦。我不是一个高手,只是过得去。

我已经使用每个中的ID加入了3个表。还有一些汇总数据。我想要做的就是按区域分组然而我得到重复的区域行而不是它被组合在一起。

元表

 -------------------------------
 |id    | Region   | Area      |
 -------------------------------
 |876   | London   | Ruislip   |
 -------------------------------
 | 899  |South West| Cheltenham|
 -------------------------------

T1表

  -----------------------
 |id    | Total_spend   | 
 ------------------------
 |876   | 89999         |
 ------------------------
 | 899  | 76664         |
 ------------------------

T2表

  --------------------------
 |id    | Total_expend     | 
 ---------------------------
 |876   | 8999             |
 ---------------------------
 | 899  | 7837             |
 ---------------------------
 |876   | 89999            |
 ---------------------------
 | 899  | 6777             |

以下代码如下

 Select meta.region, T1.total_spend,
              Sum(T2.total_expend),
 from meta,t1,t2
 where meta.id = T1.id and meta.id=T2.id
 Group by meta.region, T1.total_spend

我在区域列中重复行,因为T2中有几个相同的行,但甚至不能确保其正确聚合。

我不知道如何解决这个问题。

期望的输出

 ----------------------------------------
 | Region   | total_spend | total_expend|
 ----------------------------------------
 | London   | 89999       | 90898       |
 ----------------------------------------
 |South West| 76664       | 14614       |
 ----------------------------------------

因此,total_expend由总和T1和T2连接到meta通过id聚合,然后我想在元数据表上按区域分组

sql postgresql
1个回答
1
投票

听起来你只想通过region分组。

SELECT meta.region,
       sum(t1.total_spend),
       sum(t2.total_expend)
       FROM meta
            INNER JOIN t1
                       ON meta.id = t1.id
            INNER JOIN t2
                       ON meta.id = t2.id
       GROUP BY meta.region;

如果你另外GROUP BY t1.total_spend你将每个组分为region每个total_spend亚组。

还要考虑在JOIN中使用显式的FROM语法而不是逗号。它更容易阅读和理解。

© www.soinside.com 2019 - 2024. All rights reserved.