问题描述
这道题是最近参加某公司笔试题目遇到的,小弟sql能力不是很强,所以求查询sql,还有的话,我的思路是用sql过滤出几十万条的数据,然后查询到服务器进行处理,是否还需要多线程来进行数据写入呢?某系统根据用户购买数据已经生成了同时购买同一类别下两个产品的数据,现需要使用该数据,生成同时购买同一类别下三个产品的数据,请设计并简要实现:说明:1、表结构如下:create table purchasetogether ( ProductId1 varchar(50) not null, ProductId2 varchar(50) not null, CategoryId int(10) not null, CustomerCount int(10) not null, CustomerIds text not null, primary key (ProductId1, ProductId2), key CategoryId (CategoryId));create table multipurchasetogether ( ProductId1 varchar(50) not null, ProductId2 varchar(50) not null, ProductId3 varchar(50) not null, CategoryId int(10) not null, CustomerCount int(10) not null, CustomerIds text not null, primary key (ProductId1, ProductId2, ProductId3), key CategoryId (CategoryId)); ProductId1: 同时购买的第一个产品id,已有数据已经保证ProductId1 < ProductId2 ProductId2: 同时购买的第二个产品id CategoryId: 产品类别id CustomerCount: 同时购买ProductId1和ProductId2的用户数量 CustomerIds: 同时购买ProductId1和ProductId2的所有用户id列表,用户id间以逗号分隔2、该表的数据量为千万或者上亿级,处理时需要按照每个产品类别(Category)进行,单个类别的数据量可能会达到百万级。设计和实现时可以只考虑处理配置的单个类别。3、生成的数据放入multipurchasetogether表,表结构与purchasetogether类似,并且需要保证ProductId1<ProductId2<ProductId3。
解决方案
实际分析: 表multipurchasetogether中的数据肯定是从purchasetogether表中获取的,且由 select a.p1,a.p2,b.p2 as p3 from purchasetogether as ajoin purchasetogether as b on b.p1=a.p1 and a.CategoryId=b.CategoryId and a.p2!=b.p2
解决方案二:
看着很迷糊,建议先把情况说清楚一些吧。
解决方案三:
你这个题描述的不是很清楚,如果题本身就这样,排除是错误或业务根本不对的情况来分析,我按我的理解说一下。根据已有的同时购买同一类2个产品的用户,生成含有同一类的第三个产品的,只能在同时购买同一类2个产品的用户去查询 这些用户中购买这一类第三个产品的用户。得出的就是同时购买同一类3个产品的用户。这样保证了类别、用户的条件筛选。但你这里有个矛盾的问题,ProductId1 < ProductId2,产品1与产品2都为字符类型,你只表明为产品id,那么如何满足ProductId1 < ProductId2?同理ProductId1<ProductId2<ProductId3。也为矛盾。
解决方案四:
某系统根据用户购买数据已经生成了同时购买同一类别下两个产品的数据,现需要使用该数据,生成同时购买同一类别下三个产品的数据.实在是不知所云。是不是发高烧了?这两个产品的数据怎么生成三个产品的数据?这是什么业务?