在我的数据类的最后一个项目中,我试图用mysql(使用workbench 6.3ce和server5.7)从一个包含900000多个事务的数据库中创建一个市场篮子分析。
下面是一张表格的草图,我把它放在一起得到了我需要的东西(有些东西是供以后查询用的)。。。
表格:
sales
柱:
pos_trans_id INT(11)
basketId VARCHAR(45)
productNumber VARCHAR(25)
productDescription VARCHAR(255)
categoryCode VARCHAR(25)
categoryDescription VARCHAR(255)
subcategoryCode VARCHAR(25)
subcategoryDescription VARCHAR(255)
quantity INT(11)
purchaseAmt DECIMAL(12,2)
dateOfSale INT(11)
这是我为自己的市场篮子分析而提出的问题:
SELECT purchaseone.productNumber, purchaseone.productDescription, purchasetwo.productNumber, purchasetwo.productDescription, purchaseone.basketId
FROM
(SELECT DISTINCT productNumber, productDescription, basketId
FROM sales) AS purchaseone
JOIN
(SELECT DISTINCT productNumber, productDescription, basketId
FROM sales) AS purchasetwo
ON
(
purchaseone.basketId = purchasetwo.basketId AND
purchaseone.productNumber != purchasetwo.productNumber AND
purchaseone.productNumber < purchasetwo.productNumber
);
我遇到的问题是,查询将运行数小时,数小时,最终什么也不给我,否则在workbench中可视化将花费很长时间,因此毫无用处。
有没有人知道我是不是做错了什么事,或者我应该做些什么来加快进度?提前谢谢。
- 编辑:这是你要求的额外内容*
完整原始数据文件
到目前为止,我已经创建了两个自定义表:
CREATE TABLE sales
(\n pos_trans_id
int(11) NOT NULL DEFAULT '0', \n basketId
varchar(45) DEFAULT NULL, \n productNumber
varchar(25) DEFAULT NULL, \n productDescription
varchar(255) DEFAULT NULL, \n categoryCode
varchar(25) DEFAULT NULL, \n categoryDescription
varchar(255) DEFAULT '0', \n subcategoryCode
varchar(25) DEFAULT NULL, \n subcategoryDescription
varchar(255) DEFAULT '0', \n quantity
int(11) DEFAULT NULL, \n purchaseAmt
decimal(12,2) DEFAULT NULL, \n dateOfSale
int(11) DEFAULT NULL \n) ENGINE=InnoDB DEFAULT CHARSET=latin1 CREATE TABLE 'date' (\n
dateKeyint(11) NOT NULL, \n
dayOfTheMonthint(2) DEFAULT NULL, \n
dayOfTheWeekint(1) DEFAULT NULL, \n PRIMARY KEY (
dateKey) \n) \n ENGINE=InnoDB DEFAULT CHARSET=latin1
1条答案
按热度按时间moiiocjp1#
从您的查询中,似乎您正在尝试生成“还购买了”或“购买了”类型的分析。下面的查询应该运行得更快。它消除了查询中的子查询,并大大简化了任务。