基于两列GROUP BY:查询仅生产单一产品类型且多型号的厂商
解决思路与SQL实现
嘿,这个需求我经常碰到,给你两种实用的SQL写法,都能完美筛选出仅生产一种产品类型且该类型下有多个型号的厂商,最终输出maker和type:
方法一:窗口函数+子查询
这种方法用窗口函数快速统计每个厂商的产品类型总数,逻辑清晰易懂:
SELECT maker, type FROM ( SELECT maker, type, COUNT(DISTINCT model) AS model_count, -- 统计每个厂商的产品类型总数 COUNT(DISTINCT type) OVER (PARTITION BY maker) AS type_count FROM your_table_name -- 替换成你的实际表名 GROUP BY maker, type ) AS sub_query -- 筛选条件:仅1种产品类型,且该类型下型号数>1 WHERE type_count = 1 AND model_count > 1;
方法二:GROUP BY + NOT EXISTS
如果你的数据库不支持窗口函数,这种传统写法也能搞定:
SELECT t1.maker, t1.type FROM your_table_name t1 -- 替换成你的实际表名 GROUP BY t1.maker, t1.type -- 先筛选该厂商-类型组合下有多个型号 HAVING COUNT(DISTINCT t1.model) > 1 -- 再确保该厂商没有其他类型的产品 AND NOT EXISTS ( SELECT 1 FROM your_table_name t2 WHERE t2.maker = t1.maker AND t2.type != t1.type );
关键逻辑说明
两种方法的核心都是同时满足两个条件:
- 厂商只生产一种产品类型(排除同时生产多种类型的厂商)
- 该产品类型下有多个不同型号(排除只生产单个型号的厂商)
内容的提问来源于stack exchange,提问作者efi perez
相关产品推荐
相关产品推荐

