如何使用 Oracle SQL 仅获取单一类型
Posted
技术标签:
【中文标题】如何使用 Oracle SQL 仅获取单一类型【英文标题】:How to fetch only single type using Oracle SQL 【发布时间】:2021-11-17 02:04:30 【问题描述】:我只想获取只有一种类型的公司。我正在使用 Oracle 12C。下面是示例数据集
结果集:-
请有人帮我解决这个问题。
【问题讨论】:
如果您只需要获取公司,为什么您仍然需要在输出中每个公司多行?每个公司一行就足够了。 另一件事:您的帖子被标记为 oracle11g 和 oracle12c。你的实际版本是什么?这可能会产生很大的不同;一个潜在的解决方案使用match_recognize
子句,但这仅在 oracle 12.1 之后可用(所以 - 在 oracle 11g 中不可用)。请确保您始终为您的真实数据库标记正确的版本。
【参考方案1】:
select companyid, min(type_) as type_
from [table_name]
group by companyid
having min(type_) = max(type_)
;
将[table_name]
替换为您的实际类型名称。另请注意,我使用type_
(带下划线)作为列名。我希望你的列名不是type
,这是一个保留关键字;如果是,请更改它。
一种可能的替代方法是使用having count(distinct(type_)) = 1
- 但这是一个糟糕的解决方案。它需要在每个组内进行distinct
操作(通过companyid
)。相比之下,min
和 max
更容易跟踪。
【讨论】:
【参考方案2】:你可以使用not exists
:
select t.*
from t
where not exists (select 1
from t t2
where t2.companyid = t.companyid and t2.type <> t.type
);
【讨论】:
【参考方案3】:另一种方法是将每个公司的MIN(TYPE)
与其MAX(TYPE)
进行比较。如果它们相同,则只有一个TYPE
。
SELECT CompanyId, Type
FROM myTable
WHERE COMPANYID IN (
SELECT COMPANYID
FROM myTable
GROUP BY COMPANYID
HAVING MIN(TYPE) = MAX(TYPE)
)
【讨论】:
以上是关于如何使用 Oracle SQL 仅获取单一类型的主要内容,如果未能解决你的问题,请参考以下文章
如何仅使用 sql 在 apex oracle 的交互式网格中实现选择列表以及 oracle APEX 中可用的内容?