mysql实现关联订单统计

1、要求如下

收货人 收货地址 订单号 用户ID

张三 北京 1001 1

张四 上海 1002 2

张五 北京 1003 3

张六 广州 1004 4

张三 深圳 1005 5

张七 上海 1006 6

现在有这样的一个需求,每一行假定是一条订单记录,收货人和收货地址字段任意一项与其他订单一致,即认为是关联订单

如果关联订单大于3条,就把这条订单对应的用户ID记录下来。最终要的就是用户ID的列表。

比如:**订单号1001和订单号1005的收货人都是‘张三’,证明这两条订单是关联订单,而且订单号1001和订单号1003

需要用MySQL实现

2、实现如下:

create table order_table(
  rec_p varchar(20),
  rec_addr varchar(100),
  order_no varchar(20),
  user_id varchar(20)
);
insert into order_table(rec_p,rec_addr,order_no,user_id) values('张三','北京','1001','1');
insert into order_table(rec_p,rec_addr,order_no,user_id) values('张四','上海','1002','2');
insert into order_table(rec_p,rec_addr,order_no,user_id) values('张五','北京','1003','1');
insert into order_table(rec_p,rec_addr,order_no,user_id) values('张六','广州','1004','3');
insert into order_table(rec_p,rec_addr,order_no,user_id) values('张三','深圳','1005','1');
insert into order_table(rec_p,rec_addr,order_no,user_id) values('张七','上海','1006','4');

select  a.* from order_table a
,(select rec_p,count(*) pnum from order_table group by rec_p) a1
,(select rec_addr,count(*) addrnum from order_table group by rec_addr) a2
where a.rec_p=a1.rec_p and a.rec_addr=a2.rec_addr and (pnum+addrnum)>3
时间: 2024-10-05 22:37:00

mysql实现关联订单统计的相关文章

MySQL 8.0 中统计信息直方图的尝试

直方图是表上某个字段在按照一定百分比和规律采样后的数据分布的一种描述,最重要的作用之一就是根据查询条件,预估符合条件的数据量,为sql执行计划的生成提供重要的依据. 在MySQL 8.0之前的版本中,MySQL仅有一个简单的统计信息却没有直方图,没有直方图的统计信息可以说是没有任何意义的. MySQL 8.0新特性之一就是开始支持统计信息的直方图,这个概念很早就提出来了,抽空具体尝试了一下使用方法. 之前写过MSSQL相关统计信息的一点东西,在原理上都是一致的, 照旧,直接上例子,造数据,创建一

mysql中使用count()统计的特殊之处

如果你的需要是统计总行数时,为什么要使用count(*),而避免使用指定具体的列名?count()函数里面的参数是列名的的时候,那么会计算有值项的次数.也就是,该列没有值的项并不会进入计算范围.这样的话,你想统计的行数并不准确.更重要的是,还会增加消耗.因为,需要判断扫描所有行才知道值是否有值.如果使用count(*),它会计算总行数.不管你是否有值都会列入计算范围.另外一点:mysqlisam引擎很容易获得总行数的统计.查询速度变得更快归纳:实际编程中统计总行数是经常用到的.此时使用count

MySQL 查询优化 - 关联查询

1. 关联查询执行流程 MySQL执行关联查询的策略很简单,他会从一个表中循环取出单条数据,然后用该条数据到下一个表中寻找匹配的行,然后回溯到上一个表,到所有的数据匹配完成为止.因此也被称为"嵌套循环关联". 来看下面这个SQL: select tb1.col1, tb2,col2 from tb1 inner join tb2 using(col3) where tb1.col1 in (5,6) 他的执行顺序为(伪代码): List outerDataList = "se

mysql数据库按周统计

mysql数据库按周统计 需求:统计本周的数据,上一周的数据,不管是不是跨年,星期一是第1天. week函数总共分为8种情况: 以星期一还是星期天做为一周的第1天(一周7天从星期一到星期天) 一年的第1个星期,4天以上在本年还是星期的第1天在本年. 一年开始属于去年的天,返回0还是上一年的星期数. WEEK(date[,mode]) This function returns the week number for date. The two-argument form of WEEK() en

Yii2实现跨mysql数据库关联查询排序功能

遇到一个项目,需要跨表网上找了很多的资料,整理一下,方便以后再次使用 背景:在一个mysql服务器上(注意:两个数据库必须在同一个mysql服务器上)有两个数据库: memory (存储常规数据表) 中有一个 user 表(记录用户信息) memory_stat (存储统计数据表) 中有一个 user_stat (记录用户统计数据) 现在在 user 表生成的 GridView 列表中展示 user_stat 中的统计数据 只需要在User的model类中添加关联. public functio

mysql slow log 简单统计

众所周知,mysql slow log中很多sql 语句结构和对象是相同,只是其中变量不一样,对于这样的sql,我们完全可以将其归为一类,统计其执行次数.执行时间平均值等参数,而pt-query-digest恰好就是这样一款工具,能够对slow sql 进行归类.分组和分析,统计同一类sql多次运行后的参数:max.min.avg.count等: # Query 6: 0.23QPS, 1.07x concurrency, ID 0x7F4D624CEA244E17 at byte 175919

MySQL 分组之后如何统计记录条数 gourp by 之后的 count()

SELECT count(*) FROM 表名 WHERE 条件 // 这样查出来的是总记录条 SELECT count(*) FROM 表名 WHERE 条件 GROUP BY id //这样统计的会是每组的记录条数. 如何获得 第二个sql语句的总记录条数? 则是,如下: select count(*) from(SELECT count(*) FROM 表名 WHERE 条件 GROUP BY id ) a ; 注意: 子查询方式,MySQL中子结果集必须使用别名,而Oracle中不需要特

[MySQL] 按日期进行统计(前一天、本周、某一天)

在mysql数据库中,常常会遇到统计当天的内容.例如,在user表中,日期字段为:log_time统计当天 sql语句为: select * from user where date(log_time) = curdate(); curdate()表示当天日期统计前一天 如果表示前一天的数据,则不能使用curdate()-1,因为当日期为月初时,curdate()-1 日期就不是上一个月的月末日期. 例如:今天是6月1日,理论上curdate()-1为5月31日,但是curdate()-1得到不

大数据统计脚本, 分城市订单统计

date_parameter <- "2016-08-01"start_date<-as.Date(date_parameter)dayCount_parameter = 1array = strsplit(as.character(start_date),"-")year = as.character(array[1])month=as.character(array[2]) hiveContext <- sparkRHive.init(sc)s