如何查询stats表中仅向单个供应商采购的非重复id_proj
场景说明
现有名为stats的数据表,包含三个字段:
id_seller:供应商IDid_part:零件IDid_proj:项目ID
查询需求
筛选出仅向唯一1家供应商采购的项目ID(id_proj),即对应项目不存在和除该供应商外的其他供应商的交易记录,示例场景下符合要求的返回结果为J6。
实现方案
如果你之前用COUNT子查询没有得到正确结果,大概率是没有去重统计供应商数量,正确查询语句如下:
SELECT id_proj FROM stats GROUP BY id_proj HAVING COUNT(DISTINCT id_seller) = 1;
逻辑说明
- 按
id_proj对所有记录分组,每个分组对应一个项目的全部交易数据 - 用
COUNT(DISTINCT id_seller)统计每个项目关联的不同供应商数量,过滤出数量等于1的分组,即可得到仅向一家供应商采购的项目ID - 如果确认同一个项目和同一个供应商只会生成1条记录,可以去掉
DISTINCT关键字,直接写COUNT(id_seller) = 1即可
如果需要同时输出该项目对应的唯一供应商ID,可以用如下语句:
SELECT id_proj, MIN(id_seller) AS exclusive_supplier FROM stats GROUP BY id_proj HAVING COUNT(DISTINCT id_seller) = 1;
内容的提问来源于stack exchange,提问作者CherrJ
相关产品推荐
相关产品推荐

