【问题标题】:How to fetch only single type using Oracle SQL如何使用 Oracle SQL 仅获取单一类型
【发布时间】:2021-11-17 02:04:30
【问题描述】:

我只想获取只有一种类型的公司。我正在使用 Oracle 12C。下面是示例数据集

结果集:-

请有人帮我解决这个问题。

【问题讨论】:

  • 如果您只需要获取公司,为什么您仍然需要在输出中每个公司多行?每个公司一行就足够了。
  • 另一件事:您的帖子被标记为 oracle11g 和 oracle12c。你的实际版本是什么?这可能会产生很大的不同;一个潜在的解决方案使用 match_recognize 子句,但这仅在 oracle 12.1 之后可用(所以 - 在 oracle 11g 中不可用)。请确保您始终为您的真实数据库标记正确的版本。

标签: sql oracle oracle11g oracle12c


【解决方案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)。相比之下,minmax 更容易跟踪。

【讨论】:

    【解决方案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)
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-16
        • 1970-01-01
        • 2011-01-21
        • 1970-01-01
        • 2021-04-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多