查找客户一起购买但不重复的产品列

Posted

技术标签:

【中文标题】查找客户一起购买但不重复的产品列【英文标题】:Find Products customer bought together but non repeating columns 【发布时间】:2021-12-13 02:35:54 【问题描述】:

我正在使用 SQL Server,我正在尝试找出一起购买最多的前 2 种产品

这是一个产品表

我希望它显示如下:

我试过了

SELECT TOP 2 Product_Id, bought_with_Product_Id, times_bought_together 
FROM PRODUCT
GROUP BY Product_Id, bought_with_Product_Id, times_bought_together

也试过了

SELECT TOP 2 *
FROM Product
WHERE times_bought_together = (SELECT MAX(times_bought_together) FROM product)
AND Product_Id <> bought_with_Product_Id

它返回

如何使 product_id 和 buy_with_product_Id 行不重叠

【问题讨论】:

我很困惑,所以表中已经包含了与该产品一起购买的另一种产品,以及一起购买的时间?我想我对您开始查询的表感到困惑。看起来很奇怪。 我在***.com/questions/18578216/…之后创建了一个视图 那么在上面的表格示例中,我们是否假设前两行基本上是重复的?也就是说,产品 1 和 2 总共有 3 个销售额?或者更确切地说,他们应该总共有 6 个销售额吗? 是的,产品 1 和 2 总共有 3 个销售额。总共不是 6 次销售 根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。 【参考方案1】:

您可以使用 NOT EXISTS 测试排除重复行,例如

declare @Test table (id int, otherId int, times int);

insert into @Test (id, otherId, times)
values
(1,2,3),
(2,1,3),
(4,1,2),
(1,4,2),
(1,5,1),
(5,1,1);

select top 2 *
from @Test T1
where not exists (
    select 1
    from @Test T2
    where T1.id = T2.otherId
    and T1.otherId = T2.id
    -- Keep the duplicate with the lower id
    and T2.id < T1.id
);

返回:

id otherId times
1 2 3
1 4 2

注意:为您的测试数据提供 DDL+DML(如此处所示)使人们更容易回答您的问题。

【讨论】:

非常感谢!

以上是关于查找客户一起购买但不重复的产品列的主要内容,如果未能解决你的问题,请参考以下文章

Android - 检查用户是否从其他软件包购买了InApp产品[重复]

StoreKit In App Purchase 无效的产品标识符 [重复]

PowerBuilder -- 指定重复的列不显示

sql查询 表中一列不重复 显示多列

C# Winform DataTable 怎么过滤两列不重复

重复运行该程序的不同 k-means 结果