我有一张桌子如下。按ID分组,如果count(item)> 1,如果有重复项,请先取不同,然后应用以下条件。
1)如果count(item)> 1然后,过滤等于65或66的数据。
2)如果count(item)= 1,则什么也不做。
+----+------+
| Id | Item |
+----+------+
| 1 | 65 |
+----+------+
| 1 | 66 |
+----+------+
| 1 | 01 |
+----+------+
| 2 | 93 |
+----+------+
| 3 | 11 |
+----+------+
| 3 | 12 |
+----+------+
| 4 | 23 |
+----+------+
| 4 | 23 |
+----+------+
输出:
+----+------+
| Id | Item |
+----+------+
| 1 | 65 |
+----+------+
| 1 | 66 |
+----+------+
| 2 | 93 |
+----+------+
| 4 | 23 |
+----+------+
到目前为止尝试了这个。
select id, item
from (select table.*, count(1) over (partition by id) as cnt
from table
) tablt
where cnt > 1 and item in (65, 66) or cnt = 1;
答案 0 :(得分:0)
我认为我正确地解释了你的谓词:
select distinct id, item
from (select x.*,
count(1) over (partition by id) as cnt,
count(distinct item) over (partition by id) as cntdist
from x
) tablt
where cnt > 1 and item in (65, 66) or cntdist = 1;
但这实际上取决于你使用动词"过滤器"当你使用命令式时,什么都不做"。
当我看到动词"过滤器"时,我将其解释为"过滤掉"。但根据你的输出数据,看起来你的意思是“过滤除65和66"之外的所有内容。”
当你写下"什么都不做"时,我可以轻易地将其解释为"不显示行"。但根据输出,看起来你的意思是“什么都不做,以防止行显示在输出"。我在后一条规则中看到的唯一问题是你只显示(4,23)一次。我已经实现了这个功能,但只能根据您显示的输出解释后一个规则。
答案 1 :(得分:0)
请尝试使用以下代码:
with t1 as
(select id, item, count(1) over (partition by id) as cnt
from tablet
)
select id, item
from t1
where
cnt > 1
and
item in (65, 66)
or
cnt = 1
;
对我来说要求不是很清楚,但我确信“with”条款会解决你的目的。
答案 2 :(得分:0)
你需要把这个条件" cnt> 1和(65,66)"在()如下面
model.tuned <- tune.svm(label~., data = as.data.frame(data.train.dtm), gamma = 10^(-6:-1), cost = 10^(-1:1))