Создание раздела, который насчитывает отдельные элементы - PullRequest
0 голосов
/ 31 мая 2018

У меня есть данные, структурированные так:

id_1    id_2    cost
85358   138544  60
85358   210261  60
85358   121693  60
85358   210264  60
85358   156498  60
85358   210272  60
85358   210275  60
85358   154615  60
85358   171304  60
85358   138547  60
85358   171304  150
85358   210272  150
85358   156498  150
85358   210264  150
85358   138547  150
85358   138544  150
85358   210275  150
85358   121693  150
85358   210261  150
85358   154615  150
85358   138544  155
85358   210264  155
85358   210261  155
85358   121693  155
85358   210275  155
85358   154615  155
85358   210272  155
85358   171304  155
85358   156498  155
85358   138547  155

Я надеюсь создать новый столбец, который разделяет различное число id_2, связанное с каждым id_1 и cost

Таким образом, конечный продукт будет выглядеть примерно так:

id_1    id_2    cost distinct calc
85358   138544  60   10       6.00
85358   210261  60   10       6.00
85358   121693  60   10       6.00
85358   210264  60   10       6.00
85358   156498  60   10       6.00
85358   210272  60   10       6.00
85358   210275  60   10       6.00
85358   154615  60   10       6.00
85358   171304  60   10       6.00
85358   138547  60   10       6.00
85358   171304  150  10       15.00
85358   210272  150  10       15.00
85358   156498  150  10       15.00
85358   210264  150  10       15.00
85358   138547  150  10       15.00
85358   138544  150  10       15.00
85358   210275  150  10       15.00
85358   121693  150  10       15.00
85358   210261  150  10       15.00
85358   154615  150  10       15.00
85358   138544  155  11       14.09
85358   210264  155  11       14.09
85358   210261  155  11       14.09
85358   121693  155  11       14.09
85358   210275  155  11       14.09
85358   154615  155  11       14.09
85358   210272  155  11       14.09
85358   171304  155  11       14.09
85358   156498  155  11       14.09
85358   138547  155  11       14.09
85358   222431  155  11       14.09

Так что да, distinct представляет количество различных / уникальных id_2, связанных с каждым id_1 и cost в то время как calc это просто cost/distinct.

Я уверен, что это связано с какой-то функцией разделения, но все, что я пробовал до сих пор, не будет работать.

Ответы [ 2 ]

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

Ни Redshift, ни Postgres не поддерживают count distinct с оконными функциями.

Однако, если id_2 уникально для данного id_1, то нам не нужна операция подсчета, как ее эквивалентсчитать.В ваших примерах данные id_2 уникальны для id_1

SELECT
t.*, COUNT(*) OVER (PARTITION BY t.id_1) distinct_count,
(t.cost / COUNT(*) OVER (PARTITION BY t.id_1)) :: REAL calc
FROM thetable t

В противном случае агрегируйте различные подсчеты за id_1 в подзапросе и объединитесь;

SELECT t.*, t2.count_2, (t.cost / t2.count_2) :: REAL calc

FROM thetable t
JOIN (SELECT id_1, COUNT(DISTINCT id_2) count_2 FROM thetable GROUP BY 1) t2
  ON t2.id_1 = t.id_1
0 голосов
/ 31 мая 2018

Я бы сделал подзапрос, подобный этому:

select a.*, cnt, a.cost/cast(cnt as float) from yourtable a 
join (
select id_1,  cost, count(distinct id_2) cnt
from yourtable
group by id_1,  cost)b
on a.id_1=b.id_1 and a.cost=b.cost
...