Postgres получить ранг элемента после расчета - PullRequest
0 голосов
/ 13 марта 2020

Трудно выразить словами то, что я пытаюсь сделать. Мои знания в SQL слишком слабы, чтобы использовать правильную терминологию, поэтому я попытаюсь проиллюстрировать это в качестве примера.

Скажем, у меня есть большая таблица, состоящая из столбцов "value", "user" и "type"

value|user_id|type|

  100|      1|   1|
  200|      1|   1|
  100|      1|   2|
  722|      1|   3|
   48|      2|   1|
  724|      2|   2|
  175|      2|   3|

1) Я вычисляю сумму «value» для каждого «user_id» для каждого «type».

SELECT SUM("value"), "user_id", "type" from "table" group by "user_id", "type"

, давая мне

value|user_id|type|

  300|      1|   1|
  100|      1|   2|
  722|      1|   3|
   48|      2|   1|
  724|      2|   2|
  175|      2|   3|

2) I хотите получить ранг "user_id" для каждого "типа" на основе "значения".

Для типа 1 значение для пользователя 1 больше, чем для пользователя 2, поэтому пользователь 1 занимает 1 и 2 ранги 2. Для типа 2 значение для пользователя 2 больше ...

Другими словами, я хочу создать таблицу для пользователя 1:

rank|type
   1|1
   2|2
   1|3

и для пользователя 2:

rank|type
   2|1
   1|2
   2|3

Буду очень признателен за помощь.

1 Ответ

2 голосов
/ 13 марта 2020

Вы можете использовать результат агрегатной функции для оконной функции. Функция окна будет обработана после group by:

SELECT sum(value), user_id, type, 
       rank() over (partition by type order by sum(value) desc) 
from the_table 
group by user_id, type
order by user_id, type;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...