如何使用Oracle SQL查询仅对应单一类型的公司
Oracle 12C 查询仅对应唯一类型公司的SQL方案
需求说明
筛选出所有仅关联唯一一种公司类型的企业记录。
实现方案
方案1:分组聚合实现(兼容性最好,性能最优)
假设你的表名为company_info,对应字段为company_name(公司名称)、company_type(公司类型),SQL如下:
SELECT company_name, MAX(company_type) AS company_type FROM company_info GROUP BY company_name HAVING COUNT(DISTINCT company_type) = 1;
逻辑说明:按公司名称分组,统计每个公司名下不同类型的数量,仅保留数量为1的分组,此时分组内的类型唯一,用MAX/MIN即可取出对应的类型值。
方案2:窗口函数实现(适合需要保留原始行数据的场景)
如果你需要输出符合条件的所有原始行而非聚合结果,可以使用Oracle 12C支持的窗口函数实现:
SELECT company_name, company_type FROM ( SELECT company_name, company_type, COUNT(DISTINCT company_type) OVER(PARTITION BY company_name) AS type_count FROM company_info ) tmp WHERE type_count = 1;
如果需要去重仅保留每个公司的一条记录,在外层追加GROUP BY company_name, company_type即可。
注意事项
- 请将SQL中的表名、字段名替换为你实际业务表的对应名称
- 若
company_type字段允许NULL值且需要将NULL算作一种独立类型,可将COUNT(DISTINCT company_type)替换为COUNT(DISTINCT NVL(company_type, '自定义占位符')),占位符需确保不会出现在正常的类型取值中。
内容的提问来源于stack exchange,提问作者SwapnaSubham Das
相关产品推荐
相关产品推荐

