同时去重满足指定条件的数据

需求: 统计复制文案人数

方式一

SELECT
	count( DISTINCT client_tem_id ) AS '复制文案人数' 
FROM
	`ltn_event_db_log` 
WHERE
	event_type = 1;

方式二(重点)

在返回参数时,去重某一字段,并在去重数据中限制另一字段必须等于一个条件

SELECT
	COUNT( DISTINCT CASE WHEN event_type = 1 THEN client_tem_id END ) AS '复制文案人数'
	COUNT( DISTINCT CASE WHEN event_type = 2 THEN client_tem_id END ) AS '点击分享人数'
FROM
	`ltn_url_visit_db_log`;

其中的 CASE WHENEND是用来判断条件是否成立,如果成立就计入统计数量中。

采用上面那种方式可以同时统计其他字段

ps:

数据表

CREATE TABLE `ltn_event_db_log` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
  `url` varchar(255) NOT NULL DEFAULT '' COMMENT '访问链接',
  `client_tem_id` varchar(255) NOT NULL DEFAULT '' COMMENT '访客id',
  `param_json` varchar(2000) NOT NULL DEFAULT '' COMMENT '参数json',
  `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updater_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '更新人',
  `creator_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '创建人',
  `creator` varchar(64) NOT NULL DEFAULT '' COMMENT '创建人姓名',
  `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `deleted` tinyint(255) NOT NULL DEFAULT '0' COMMENT '是否删除 0正常 1删除',
  `p_id` bigint(20) NOT NULL DEFAULT '0' COMMENT 'mongoId',
  `open_id` varchar(50) NOT NULL DEFAULT '' COMMENT '访客的openId',
  `event_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '事件类型: 0 访问 ,1 复制文案 ,2点击分享 3 点击开始测评 4 点击关注公众号 5 识别图片',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2253 DEFAULT CHARSET=utf8mb4 COMMENT='访问日志表';
posted @ 2023-04-17 15:15  进击的小蔡鸟  阅读(33)  评论(0编辑  收藏  举报