首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Postgres:创建以另一个表中的数据为条件的二进制数据列

使用Postgres:创建以另一个表中的数据为条件的二进制数据列
EN

Stack Overflow用户
提问于 2013-08-16 23:18:13
回答 2查看 430关注 0票数 0

我有一个表,其中包含唯一ID的列表和描述这些ID特征的列。它的形式如下:

代码语言:javascript
复制
ID  Tall  Funny  Weight
1   1      0     200
2   0      0     180
3   1      1     250

诸若此类。我有另一张桌子,它只是一个有特征的人的身份证清单,比如收入超过10万美元。

代码语言:javascript
复制
Rich
1 
3 

我想要做的是在第一个表中创建一个列,如果它们位于第二个表中,则为=1,否则为0。我可以在R里这样做:

代码语言:javascript
复制
TableA$Rich <- TableA$ID %in% TableB

但是它非常慢,如果没有其他原因,因为我的postgres (ParAccel/PaDB)集群拥有比我可以运行的资源更多的资源。你能帮我完成这个任务吗?

我试着做一个左外连接,就像.

代码语言:javascript
复制
create table c as(select a.id, tall, funny, weight,b.id as rich
from tablea a
left outer join tableb b 
on a.id = b.id);

但它产生了意想不到的结果。它给了我

代码语言:javascript
复制
ID  Tall  Funny  Weight  Rich
1   1      0     200     1
2   0      0     180     2
3   1      1     250     3

即使应该是"1,NULL,3“,我也倾向于1和0。我担心这可能是数据的错误,但数据看起来是正确的。我在一个案例中尝试了同样的方法,在语句中得到了相同的结果,但是对于Rich的所有值,我都使用了"TRUE“。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-16 23:24:33

case语句解决了您的问题:

代码语言:javascript
复制
create table c as
    select a.id, tall, funny, weight,
           (case when b.id is null then 0 else 1 end) as rich
    from tablea a left outer join
         tableb b
         on a.id = b.id;
票数 2
EN

Stack Overflow用户

发布于 2013-08-16 23:23:48

代码语言:javascript
复制
select
    a.id, tall, funny, weight,
    (b.id is not null)::integer as rich
from
    tablea a
    left outer join
    tableb b on a.id = b.id
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18283438

复制
相关文章

相似问题

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