查询intend_items表中存在重复产品的意向单数量
统计存在重复产品的意向单数量
要解决这个问题,我们需要找出所有至少有一款产品重复出现的意向单(Intend_no),然后统计这类意向单的总数量。结合你的示例数据,意向单0102/18里PC12和V13都重复了,所以最终结果应该是1。
方案一:使用GROUP BY + HAVING(推荐,高效通用)
这是最直接且高效的方法,先通过分组筛选出有重复产品的意向单,再对意向单去重计数:
SELECT COUNT(DISTINCT Intend_no) AS duplicate_intend_count FROM ( -- 子查询:找出每个意向单中重复出现的产品组合 SELECT Intend_no, Product FROM intend_items GROUP BY Intend_no, Product HAVING COUNT(*) > 1 -- 筛选出现次数大于1的产品 ) AS duplicated_product_records;
逻辑解释:
- 子查询部分:按
Intend_no和Product组合分组,统计每个组合的出现次数。如果某个组合的次数>1,说明该意向单里这款产品重复了。 - 外层查询:对子查询返回的
Intend_no去重后计数,得到存在重复产品的意向单总数。
方案二:使用EXISTS关联查询
如果你更倾向于用关联查询的方式,也可以用EXISTS来判断是否存在重复记录:
SELECT COUNT(DISTINCT ii1.Intend_no) AS duplicate_intend_count FROM intend_items ii1 WHERE EXISTS ( SELECT 1 FROM intend_items ii2 WHERE ii1.Intend_no = ii2.Intend_no AND ii1.Product = ii2.Product AND ii1.ROWID != ii2.ROWID -- 注意:不同数据库的行标识不同,比如MySQL用主键,SQL Server用特定行ID字段 );
逻辑解释:
对于表中的每一条记录,检查是否存在另一条同意向单、同产品但不同行的记录。如果存在,说明该意向单有重复产品,最后对符合条件的意向单去重计数。
结果验证
用你的示例数据测试,两个方案都会返回1,符合预期。
内容的提问来源于stack exchange,提问作者user7403515
相关产品推荐
相关产品推荐

