mysql统计不同消费阶段的人数_各位sql大拿,帮忙统计一个不同日期二次消费的人数...

本文提供了一种SQL解决方案,用于统计不同地区不同日期至少发生过两次消费的用户数量,同一日期多次消费仅计为一次。

各位sql高手帮忙解下,业务需求-》 统计不同地区不同日期两次以上消费的人数,同一天消费两次或两次以上的只能算一次,结果如下表

area_name  二次消费人数

深圳                 1

北京                  2

上海                  0

CREATE TABLE `order` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`uid` int(11) NOT NULL DEFAULT "0",

`area_id` int(11) NOT NULL DEFAULT "0",

`dt` date DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

-- --

-- Records of order

-- --

INSERT INTO `order` VALUES ("1", "1", "100", "2017-03-15");

INSERT INTO `order` VALUES ("1", "1", "100", "2017-03-15");

INSERT INTO `order` VALUES ("1", "1", "100", "2017-03-16");

INSERT INTO `order` VALUES ("1", "1", "101", "2017-03-16");

INSERT INTO `order` VALUES ("1", "2", "101", "2017-03-16");

INSERT INTO `order` VALUES ("1", "2", "101", "2017-03-17");

INSERT INTO `order` VALUES ("1", "3", "101", "2017-03-17");

INSERT INTO `order` VALUES ("1", "3", "101", "2017-03-18");

INSERT INTO `order` VALUES ("1", "3", "101", "2017-03-19");

INSERT INTO `order` VALUES ("1", "3", "101", "2017-03-20");

INSERT INTO `order` VALUES ("1", "4", "102", "2017-03-20");

CREATE TABLE `area` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`area_name` varchar(20) NOT NULL DEFAULT "",

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=103 DEFAULT CHARSET=utf8;

-- --

-- Records of area

-- --

INSERT INTO `area` VALUES ("100", "深圳");

INSERT INTO `area` VALUES ("101", "北京");

INSERT INTO `area` VALUES ("102", "上海");

解决方案

100

select area_name,

(select COUNT(1) from (SELECT  area_name ,

COUNT(DISTINCT dt) AS num

FROM    `order` JOIN area ON area_id = area.id

GROUP BY area_name,`order`.uid)t

where t.area_name = area.area_name AND num>=2) as 二次消费人数

FROM area

2058a07a67d3e0cdbe1f2ac0f1114a1d.png

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明各位sql大拿,帮忙统计一个不同日期二次消费的人数!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值