同时去重满足指定条件的数据
需求: 统计复制文案人数
方式一
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 WHEN
和 END
是用来判断条件是否成立,如果成立就计入统计数量中。
采用上面那种方式可以同时统计其他字段
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='访问日志表';