数据库描述
我有一个由三个表组成的简单数据库:customer、product 和 custumer_product。
- 客户:包含有关客户的信息。他的身份证和名字
- 产品:包含有关商店中可用产品的信息。身份证和姓名
- custumer_product:连接表
- customer (table)
id integer primary key not null
name TEXT
- custumer_product (table)
id_product integer
id_customer integer
primary key(id_product, id_customer)
FOREIGN KEY(Id_product) REFERENCES product(id)
FOREIGN KEY (ID_customer) REFERENCES customer(ID)
- product (table)
id integer primary key not null
name TEXT
三个表已经在sqlfiddle中初始化了通过使用 SQLITE
。以下SQL查询用于构建数据库
create table if not exists customer (id integer primary key not null, name TEXT);
create table if not exists product (id integer primary key not null, name TEXT);
create table if not exists customer_product (id_product integer, id_customer
integer, primary key(id_product, id_customer), FOREIGN KEY(Id_product) REFERENCES product(id), FOREIGN KEY (ID_customer) REFERENCES customer(ID));
insert into customer(id,name) values(1,"john");
insert into customer(id,name) values(2,"Paul");
insert into customer(id,name) values(3,"Jenny");
insert into customer(id,name) values(4,"Fred");
insert into customer(id,name) values(5,"Lea");
insert into product(id,name) values(1,"Mouse");
insert into product(id,name) values(2,"screen");
insert into product(id,name) values(3,"pc");
insert into product(id,name) values(4,"CD");
insert into product(id,name) values(5,"Game");
insert into customer_product values(1,1);
insert into customer_product values(1,2);
insert into customer_product values(1,3);
insert into customer_product values(2,1);
insert into customer_product values(2,2);
insert into customer_product values(2,3);
insert into customer_product values(3,4);
insert into customer_product values(4,5);
insert into customer_product values(5,5);
问题
对于每个客户,我想选择购买了至少一种类似产品的所有其他客户。
- John 和 Paul 购买了至少 1 件类似的产品
- 还没有顾客购买过与珍妮相似的产品
- Fred 和 lea 购买了类似的产品
输出
"John" "Paul"
"Jenny"
"Fred" "Lea"
最佳答案
这基本上是一个自连接,也可能是一个聚合。例如,以下获取所有购买过类似产品的客户,并按类似产品的数量排序:
select cp.id_customer, cp2.id_customer, count(*)
from customer_product cp join
customer_product cp2
on cp.id_product = cp2.id_product
group by cp.id_customer, cp2.id_customer
order by cp.id_customer, count(*) desc;
您可以通过执行附加联接来引入附加信息,例如客户姓名。
关于mysql - 为每个客户选择购买相同商品的所有其他客户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33498421/