不支持sql查询
表: 执行此查询时:不支持sql查询,sql,subquery,Sql,Subquery,表: 执行此查询时: first_col second_col 78 g1 79 g2 754 g1 34 g2 67 g1 但不支持此子查询 谢谢 正如您所看到的,红移不支持相关子查询,这其中有一些原因现在并不重要。问题是您需要重写查询。乍一看,在这种情况下,这是直截了当的 关键是将其更改为join,将其中T2.firs
first_col second_col
78 g1
79 g2
754 g1
34 g2
67 g1
但不支持此子查询
谢谢 正如您所看到的,红移不支持相关子查询,这其中有一些原因现在并不重要。问题是您需要重写查询。乍一看,在这种情况下,这是直截了当的 关键是将其更改为join,将其中T2.first\u col=T1.first\u col替换为join ON子句。下面是这次重写中未经测试的一个片段,以演示这可能看起来如何。您的确切案例可能会对此进行调整:
SELECT T1.* ,CASE WHEN EXISTS (SELECT 'X' FROM Tab1 T2 WHERE T2.first_col=T1.first_col GROUP BY
second_col) THEN 'include' ELSE 'exclude' END new_col FROM Tab1 T1;
通过更改为左连接,我们仍然可以测试第一列上T2和T1之间是否不匹配。希望这能让您开始。您想知道是否有任何第二列在匹配第一列时出现少于3次。为此,您可以使用左连接,但如下所示:
SELECT T1.* ,
CASE WHEN T3.first_col is not NULL THEN 'include' ELSE 'exclude' END new_col
FROM Tab1 T1
LEFT JOIN (SELECT first_col
FROM Tab1 T2
GROUP BY second_col
HAVING count(1)<3 ) T3
ON T3.first_col=T1.first_col
;
分组依据和子查询很棘手。请解释您想做什么。第一列在您的表格中是唯一的吗?
SELECT T1.*,
COALESCE(tt1.new_col, 'exclude') as new_col
FROM Tab1 T1 LEFT JOIN
(SELECT 'include' as new_col
FROM (SELECT first_col, second_col, COUNT(*) as cnt
FROM Tab1 tt1
) tt1
HAVING MIN(cnt) < 3
) tt1;
select t1.*,
(case when min(cnt) over (partition by first_col)
then 'include' else 'exclude'
end) as new_col
from (select t1.*,
count(*) over (partition by first_col, second_col) as cnt
from tab1 t1
) t1;