如何统计数据库中用户购买的去重唯一产品数量
用户购买去重商品数统计实现方案

核心实现逻辑
统计时以用户为聚合维度,对用户关联到的商品唯一标识做去重计数,同一款商品无论在多少笔订单中出现、被购买多少次,仅计数1次。
常规该类商店数据库的表关联链路如下:
- 用户表(
users)存储用户基础信息,通过user_id字段关联订单表 - 订单表(
orders)存储订单主信息,通过order_id字段关联订单明细表 - 订单明细表(
order_items)存储每笔订单包含的具体商品记录,通过product_id字段关联商品表 - 商品表(
products)存储商品基础信息
参考SQL实现
SELECT u.user_id, u.user_name, -- 替换为你实际表中的用户名称字段 COUNT(DISTINCT oi.product_id) AS unique_purchased_product_cnt FROM users u -- 使用LEFT JOIN可保留无任何购买记录的用户,这类用户的统计结果会显示为0;如果仅需统计有购买行为的用户,可替换为INNER JOIN LEFT JOIN orders o ON u.user_id = o.user_id -- 可选业务过滤规则:仅统计有效已完成订单,可根据你表中实际的订单状态字段、枚举值自行调整 -- AND o.order_status = 'paid' LEFT JOIN order_items oi ON o.order_id = oi.order_id GROUP BY u.user_id, u.user_name;
注意事项
如果你的业务判定「同一款商品」的维度不是商品ID(
product_id),比如是通用SPU编码,将COUNT(DISTINCT)中的字段替换为对应业务判定字段即可。
不建议直接关联商品表后计数商品表主键,避免因为商品属性变更、多规格映射导致计数偏差,直接取订单明细中关联的商品唯一标识去重计数准确性最高。
内容的提问来源于stack exchange,提问作者dbUser11
相关产品推荐
相关产品推荐

