mysql - 订购了最多共同产品的夫妇 - SQL

标签 mysql sql

我无法选择订购了最多常见产品的客户。

示例:

  • 客户 1 订购的产品:a、b、c、z
  • 客户2订购的产品:a、c、d、g
  • 客户1订购的产品:g、h、z

预期结果:Customer1 |客户2 | 2(订购的常用产品数量)

我尝试过:

SELECT c.pid, c.cid, d.cid, count(c.pid)
FROM orders c JOIN orders d join 
(SELECT a.cid, b.cid FROM customers a JOIN customers b ON b.cname != a.cname AND b.cname > a.cname) as subq
ON c.cid = a.cid and d.cid = b.cid
AND c.pid = d.pid group by c.pid;

这会返回每对名字:

select a.cname client_1, b.cname client_2
from customers a join customers b on b.cname != a.cname and b.cname > a.cname;

如何获取几个 cid 的最大公共(public) pid?

表格:

customers (cid, cname, residence)
orders (pid, cid, odate, quantity)
products (pid, pname, price, origin)

最佳答案

可能不适用于所有 RDBMS。您使用的是哪一款?

select o1.cid, o2.cid, o1.pid, o1.cnt, o2.cnt
from (
 select cid, pid, count(*) as cnt
 , ROW_NUMBER() OVER(PARTITION BY cid, pid ORDER BY count(*) DESC) AS rn
 from order
 group by cid, pid
) as o1
join (
 select cid, pid, count(*) as cnt
 , ROW_NUMBER() OVER(PARTITION BY cid, pid ORDER BY count(*) DESC) AS rn
 from order
 group by cid, pid
) as o2
on o1.cid <> o2.cid
and o1.pid = o2.pid

where o1.rn = 1
 and o2.rn = 1

关于mysql - 订购了最多共同产品的夫妇 - SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46731218/

相关文章:

mysql - 仅当列值低于 100 时才增加

mysql - NEGATION INNER JOIN 与 WHERE

mysql - 根据 MySQL 中的多列确定排名

sql - 在Play框架中ebean为sqlite数据库生成的错误SQL脚本

java - 处理数据库:良好的软件工程概念

mysql - 如何创建从表中获取值并更新不同表的触发器

Java MySQL DELETE语句问题

php - CodeIgniter UPDATE 适用于第一次调用,但不适用于连续的 AJAX 调用

mysql - 如何关闭整个数据库的区分大小写

php - Laravel 5.3 失败时自动连接到另一个数据库