一个MySQL统计问题(某产品的购买次数与购买人数)使用mysql中的distinct

作者: HarmonyOS 发布时间: 2023-01-10 浏览: 1532 次 编辑
一个MySQL统计问题(某产品的购买次数与购买人数

有一张订单(order)表,凡是购买了产品,都会记录在这张表中,记录下是哪个产品、哪个用户购买的,以及时间:

-- ----------------------------
-- Table structure for order
-- ----------------------------
DROP TABLE IF EXISTS `order`;
CREATE TABLE `order` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `product_id` int(11) NOT NULL COMMENT '产品id',
  `user_id` int(11) NOT NULL COMMENT '用户id',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

假设我现在要得出每个产品的购买次数,这个很简单,只需要根据产品id分组即可:

select product_id 产品,count(1) 购买次数,  from `order` group by product_id;

但是现在有个需求,就是要在『购买次数』后面再加上一列,要得出这个产品的『购买人数』。
『购买次数』和『购买人数』并不同,比如一个产品被购买了10次,但是都是被同一个用户购买,那么购买人数就为1.

select product_id 产品,count(1) 购买次数, count(distinct user_id) 购买人数 from `order` group by product_id;