首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >创建计数不同项的分区

创建计数不同项的分区
EN

Stack Overflow用户
提问于 2018-06-01 03:39:00
回答 2查看 32关注 0票数 0

我的数据结构如下:

代码语言:javascript
复制
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_1cost相关的id_2的不同计数

所以最终的产品应该是这样的:

代码语言:javascript
复制
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_1cost关联的不同/唯一的id_2的数量,而calc仅仅是cost/distinct

我确信这涉及到某种分区函数,但我到目前为止尝试的所有东西都不起作用。

EN

回答 2

Stack Overflow用户

发布于 2018-06-01 03:43:44

Id执行如下所示的子查询:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2018-06-03 18:35:04

红移和Postgres都不支持使用窗口函数的count distinct

但是,如果id_2对于给定的计数是唯一的,那么我们不需要count distinct操作,因为它等同于id_1。在示例数据中,id_1id_2是唯一的

代码语言:javascript
复制
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的distinct计数;

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50631626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档