显示最畅销的产品对

Displaying top-selling product pairs

我有一个问题,我花了很多时间。我必须显示出现在发票上的项目对(Item1、Item2、多少)以及重复了多少对。连接发票和货物的table称为“交易”。

我有 3 tables:
项目: IdItem,名称
交易:IdTransaction、IdInvoice、IdItem
发票: IdInvoice

SQL 查询的结果必须是:

项目 1 |项目 2 |人数

假设您的表格如下所示:

CREATE TABLE Items (
   IDItem INT,
   Name VARCHAR,
   PRIMARY KEY(IDItem)
);

CREATE TABLE Invoices (
   IDInvoice INT,
   PRIMARY KEY(IDInvoice)
);
CREATE TABLE Transactions (
   IDTransaction INT,
   IDInvoice INT,
   IDItem INT,
   PRIMARY KEY(IDTransaction),
   FOREIGN KEY (IDItem) REFERENCES Items(IDItem),
   FOREIGN KEY (IDInvoices) REFERENCES Invoices(IDInvoices)
)

如果这是真的,那么您需要像这样查询结果:

SELECT i.Name,in.IDInvoice FROM Transactions t
JOIN Items i ON i.IDItem = t.IDItem
JOIN Invoices in ON in.IDInvoice = t.IDInvoice
WHERE i.Name = item1

这听起来像是自连接和聚合:

select t1.IdItem as IdItem1, t2.IdItem as IdItem2, count(*)
from transactions t1 join
     transactions t2
     on t1.IdInvoice = t2.IdInvoice and
        t1.IdItem < t2.IdItem
group by t1.IdItem, t2.IdItem
order by count(*) desc;