包含Jaccard相似性的SQL查询的联合和交集

时间:2016-02-16 01:54:32

标签: mysql sql relational-database union intersection

CREATE TABLE Customer (cid INTEGER PRIMARY KEY, cname VARCHAR(20) NOT NULL);
CREATE TABLE Product  (pid INTEGER PRIMARY KEY, pname VARCHAR(20) NOT NULL,
    msrp INTEGER NOT NULL);
CREATE TABLE Purchase (cid INTEGER, pid INTEGER, date DATE, 
    price INTEGER NOT NULL,
    PRIMARY KEY (cid, pid, date),
    FOREIGN KEY (cid) REFERENCES Customer(cid),
    FOREIGN KEY (pid) REFERENCES Product(pid));

仅考虑至少进行过一次购买的客户。对于每一对这样的 客户根据他们购买的产品计算他们的Jaccard相似度。那是, 如果客户A购买了一套产品而客户B购买了一套产品, 他们的Jaccard相似度是两组交集的大小除以大小 他们的联盟。对于每对客户,输出两个cid和Jaccard相似度。每一对 应该只输出一次,即如果(1; 3; j)是具有Jaccard相似性j的匹配的一对c,你 应该只返回(1; 3; j)而不是(3; 1; j)。通过Jaccard相似性按降序对输出进行排序, 即,应该首先列出最相似的一对。请注意,这个问题询问产品而不是产品 产品购买:如果客户购买的产品不止一次,则只计为一个 用于此计算的产品。

1 个答案:

答案 0 :(得分:0)

我建议您不要在网上寻求帮助,而是去办公时间。请参阅以下链接: http://www.cs.cornell.edu/Courses/cs4320/2016sp/