как агрегировать и группировать по нескольким таблицам в postgresql в pandas - PullRequest
0 голосов
/ 02 июня 2018

У меня возникли проблемы с группой в postgresql.Я не одержим идеей и просто собираюсь обойтись.

Я соединил 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 соединения с метачерез идентификатор, и я хочу затем сгруппировать по регионам в мета-таблицы, если это возможно

1 Ответ

0 голосов
/ 02 июня 2018

Звучит так, как будто вы хотите группировать только по 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.Его легче читать и понимать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...