Oracle sql根据其他列的条件从一列中获取数据
Posted
技术标签:
【中文标题】Oracle sql根据其他列的条件从一列中获取数据【英文标题】:Oracle sql to fetch data from one column based on condition of other columns 【发布时间】:2017-08-04 00:28:05 【问题描述】:col1 col2 col3
100 FRANCE 201604
100 FRANCE 201604
100 AUSTRALIA 201605
200 MALAYSIA 201604
300 IRELAND 201604
300 IRELAND 201605
400 SPAIN 201604
500 FRANCE 201604
500 MEXICO 201604
我正在尝试根据 col2 和 col3 的条件从 col1 获取数据。我想从 col1 中消除与 col2 没有明显组合的所有值。在我的情况下,100 和 500 将被淘汰。
现在我想看看每个月是否有 200,300、400 (col3)(201604 和 201605),所以只会出现 300。
我试过了
select c1,count(*),c3 from
(
SELECT distinct col1 c1, col2 c2, col3
FROM table
) group by c1,c3 having count(*)=1;
【问题讨论】:
一般 GROUP BY 规则说:如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须标识一个分组列或者是一个集合函数的参数。 【参考方案1】:SELECT col1
FROM tablex t
GROUP BY col1
HAVING count(distinct col2) = 1
AND ( SELECT count(1)
FROM tablex t2
WHERE t2.col1 = t.col1
AND t2.col3 in (201604,201605)
) = 2
【讨论】:
【参考方案2】:我想你想要:
select t.*
from t
where t.col1 in (select t2.col1
from (select t2.*, count(*) over (partition by col2, col3) as cnt
from t t2
) t2
group by t2.col1
having max(cnt) = 1
);
关键思想是max(t2.col1)
返回唯一值,当count(*) = 1
时。
这是一个 example 的工作。
【讨论】:
您的内部查询将返回 100。它将找到 100 作为 201605 Australia 的最大值。 @LAS 。 . .谢谢你。有一点一厢情愿的编程。我确定了答案。 他只想退回300。以上是关于Oracle sql根据其他列的条件从一列中获取数据的主要内容,如果未能解决你的问题,请参考以下文章