让我解释一下这个问题。
我有两个表,其中有3列具有相同的数据类型。如果您愿意,这3列会创建一个键/ ID,但是表中的列名称是不同的。 现在,我用这两个表的这3列创建查询。我设法独立获得了这些结果
例如:
SELECT ID, FirstColumn, sum(SecondColumn)
FROM (SELECT ABC||DEF||GHI AS ID, FirstTable.*
FROM FirstTable
WHERE ThirdColumn = *1st condition*)
GROUP BY ID, FirstColumn
;
SELECT ID, SomeColumn, sum(AnotherColumn)
FROM (SELECT JKM||OPQ||RST AS ID, SecondTable.*
FROM SecondTable
WHERE AlsoSomeColumn = *2nd condition*)
GROUP BY ID, SomeColumn
;
因此,我对两个不同的表进行了非常相似的查询。我知道结果具有一定数量的具有ID属性的相同行,这是我刚刚在查询中创建的行。我需要检查结果中的哪些行不在另一个查询的结果中,反之亦然。
我必须从查询中创建临时表或视图吗?也许以特定的方式将两个表联接在一起,并且只对它们运行一个查询?
作为初学者,我对如何将结果用作下一个查询的输入没有任何经验。我很感兴趣什么是最干净,最优雅的方法。
答案 0 :(得分:3)
不,您很可能不需要任何“临时”表。 WITH析因子句会有所帮助。
这是一个例子:
library(dplyr)
library(stringr)
data.frame(
genre = c('Action', 'Fantasy|Action', 'Animation|Fantasy')
) %>%
mutate(
isAction = grepl('Action', genre),
isAdventure = grepl('Adventure', genre),
isAnimation = grepl('Animation', genre),
isComedy = grepl('Comedy', genre),
isFantasay = grepl('Fantasy', genre)
)
# genre isAction isAdventure isAnimation isComedy isFantasay
# 1 Action TRUE FALSE FALSE FALSE FALSE
# 2 Fantasy|Action TRUE FALSE FALSE FALSE TRUE
# 3 Animation|Fantasy FALSE FALSE TRUE FALSE TRUE
要获得另一个结果,您只需切换表格即可,例如
with
first_query as
(select id, first_column, ...
from (select ABC||DEF||GHI as id, ...)
),
second_query as
(select id, some_column, ...
from (select JKM||OPQ||RST as id, ...)
)
select id from first_query
minus
select id from second_query;