创建mysql市场篮子分析

z0qdvdin  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(286)

在我的数据类的最后一个项目中,我试图用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' (\ndateKeyint(11) NOT NULL, \ndayOfTheMonthint(2) DEFAULT NULL, \ndayOfTheWeekint(1) DEFAULT NULL, \n PRIMARY KEY (dateKey) \n) \n ENGINE=InnoDB DEFAULT CHARSET=latin1

moiiocjp

moiiocjp1#

从您的查询中,似乎您正在尝试生成“还购买了”或“购买了”类型的分析。下面的查询应该运行得更快。它消除了查询中的子查询,并大大简化了任务。

SELECT 
    a.productNumber, 
    a.productDescription, 
    b.productNumber, 
    b.productDescription, 
    a.basketId
FROM `purchaseone` a
LEFT JOIN `purchaseone` b
ON a.basketId = b.basketId AND
    a.productNumber != b.productNumber AND
    a.productNumber < b.productNumber
GROUP BY a.basketId, a.productNumber, b.productNumber

相关问题