mysql - 为每个客户选择购买相同商品的所有其他客户

标签 mysql sqlite

数据库描述

我有一个由三个表组成的简单数据库: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/

相关文章:

mysql - SQL。如何在同一张表的不同行中工作/比较/查找差异

mysql - 如何使用以前的值计算百分比增加/减少

python - 使用scalingo的URL python连接到prod数据库

ios - Xcode : sqlite3_step returning 101, 但不在 block 内执行代码

java - SQLite-只读,网络容量低?

android - sqlite.SQLiteException : no such column: data1 (Sqlite code 1): 异常

php - 选择匹配 1 到多个字段的用户并删除重复项

java - Hibernate工具,auto cascade all

javascript - 如何让Electron与sqlite3一起工作?

android - 无法在 root 的 android 手机上打开数据目录