首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL的另一列中提取具有指定公共值的元组。

在SQL的另一列中提取具有指定公共值的元组。
EN

Stack Overflow用户
提问于 2018-10-03 06:20:27
回答 5查看 940关注 0票数 9

我有一个数据集,看起来如下:

代码语言:javascript
复制
 Col1    Col2    
 1        ABC 
 2        DEF
 3        ABC 
 1        DEF 

预期产出:

代码语言:javascript
复制
Col1     Col2    
 1        ABC 
 1        DEF

我只想从Col1中提取那些in,它们在列中同时具有ABCDEF值。

我在SQL中尝试了self-join,但这并没有给出预期的结果。

代码语言:javascript
复制
SELECT DISTINCT Col1
FROM db A, db B
WHERE A.ID <> B.ID
    AND A.Col2 = 'ABC'
    AND B.Col2 = 'DEF' 
GROUP BY A.Col1

此外,我在R中尝试使用以下代码进行相同的操作:

代码语言:javascript
复制
vc <- c("ABC", "DEF")
data1 <- db[db$Col2 %in% vc,]

同样,我没有得到所需的输出。谢谢你提前给我的指点。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-10-03 06:33:01

下面是您当前的查询更正:

代码语言:javascript
复制
SELECT DISTINCT t1.Col1
FROM yourTable t1
INNER JOIN yourTable t2
    ON t1.Col1 = t2.Col1
WHERE t1.Col2 = 'ABC' AND t2.Col2 = 'DEF';

Demo

联接条件是两个Col1值是相同的,第一个Col2值是ABC,第二个Col2值是DEF

但是,我可能会对此使用以下规范方法:

代码语言:javascript
复制
SELECT Col1
FROM yourTable
WHERE Col2 IN ('ABC', 'DEF')
GROUP BY Col1
HAVING MIN(Col2) <> MAX(Col2);
票数 5
EN

Stack Overflow用户

发布于 2018-10-03 06:47:19

在R,你可以

代码语言:javascript
复制
library(dplyr) 
df %>% 
   group_by(Col1) %>% 
   filter(all(vc %in% Col2))

#   Col1 Col2 
#  <int> <fct>
#1     1 ABC  
#2     1 DEF  

相当于R基的是

代码语言:javascript
复制
df[as.logical(with(df, ave(Col2, Col1, FUN = function(x) all(vc %in% x)))), ]

#  Col1 Col2
#1    1  ABC
#4    1  DEF

我们选择包含所有vc的组。

票数 7
EN

Stack Overflow用户

发布于 2019-12-05 02:44:32

R中,我们也可以使用data.table

代码语言:javascript
复制
library(data.table)
setDT(df)[, .SD[all(vc %in% Col2)], by = col1]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52620832

复制
相关文章

相似问题

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